javascript - 如何按与作为参数的给定键相同的键数对对象数组进行排序?

标签 javascript ecmascript-6 functional-programming lodash

我有一个带有一些键的基本对象,以及具有相似但不一定完全相同的键的对象列表。

const o1 = {k1: "", k2: "", k3: ""} // the basic object
const o2 = {k1: "", k4: ""}         // 1 the same key
const o3 = {k1: "", k3: ""}         // 2 the same keys
const o4 = {k3: "", k1: "", k2: ""} // 3 the same keys
const o5 = {k5: ""}                 // 0 the same keys

我想编写一个函数,它接受基础对象和其他对象的数组,并根据给定对象中相似键的数量对它们进行排序。

function order(obj, arr) {
  // ...
}

结果应该是给定对象的有序数组,该数组基于与基对象相同的键的数量。

order(o1, [o2, o3, o4, o5])
// result: [o4, o3, o2, o5]

你会用它做什么?

我在考虑按对象键的交集长度排序。

最佳答案

您可以计算相同的键并使用此值进行排序。

const
    o1 = { k1: "", k2: "", k3: "" }, // the basic object
    o2 = { k1: "", k4: "" },         // 1 the same key
    o3 = { k1: "", k3: "" },         // 2 the same keys
    o4 = { k3: "", k1: "", k2: "" }, // 3 the same keys
    o5 = { k5: "" };                 // 0 the same keys

function order(object, array) {
    function getCount(o) {
        return Object.keys(object).reduce((s, k) => s + (k in o), 0);
    }
    return array.sort((a, b) => getCount(b) - getCount(a));
}

console.log(order(o1, [o2, o3, o4, o5])); // [o4, o3, o2, o5]

关于javascript - 如何按与作为参数的给定键相同的键数对对象数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53378929/

相关文章:

javascript - Firebase 函数 onCreate() onDelete() 路径特异性

javascript - 检查浏览器是否支持 HTML5 timepicker

javascript es6 promise 在while循环中调用异步操作

javascript - 将元素从一个对象添加/合并到数组内的另一个对象

从地址到纬度和经度数字的 Javascript 地理编码不起作用

javascript - Firebase 数据库 - 防止写入指定路径以外的所有路径

javascript - node.js 模块应该导出命名函数还是对象?

oop - OOP 和函数式编程的区别(方案)

functional-programming - 如何避免使用可变数据结构并使用更多功能方法?

functional-programming - SML Ml 编程函数是具有 bool 条件的旧日期