如何通过下划线获取对象数组的唯一键?

时间:2014-05-12 07:32:37

标签: javascript underscore.js

我有array个对象,想要通过下划线获取唯一键,我该怎么做?

Array[ Object{a: 1, b: 2}, Object{b: 3, c: 4, d: 5} ]

我想得到:

Array[ "a", "b", "c", "d" ]

4 个答案:

答案 0 :(得分:6)

另一种选择:

keys = _.keys(_.extend.apply({}, array))

答案 1 :(得分:3)

下划线解决方案:

_.chain(xs).map(_.keys).flatten().unique().value();

演示: http://jsbin.com/vagup/1/edit

答案 2 :(得分:2)

使用Spread operator

纯ES6解决方案

Object.keys({...objA, ...objB});

<强>背景

它采用项目的属性(objAobjB)和“解包”它们,然后将这些属性组合到一个对象中(请参阅{ })。然后我们取结果的关键。

TypeScript转换输出(ES5):

// Helper function
var __assign = (this && this.__assign) || Object.assign || function(t) {
    for (var s, i = 1, n = arguments.length; i < n; i++) {
        s = arguments[i];
        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
            t[p] = s[p];
    }
    return t;
};

// Compile output
// Note that it's NOT lodash or underscore but the helper function from above
Object.keys(__assign({}, objA, objB));

答案 3 :(得分:0)

使用_.keys()获取对象中的所有键

var result = [];
_.each(obj, function(prop){
   var temp = _.keys(prop);
   _.each(temp, function(value){
      result.push(value);
   })
});
console.log(result);

_。contains([],value)检查值是否在数组中退出并返回'true'(如果存在); 'false',否则。以下是用于消除重复键,然后将键推送到结果数组。

var result = [];
_.each(obj, function(prop){
    var temp = _.keys(prop);
    _.each(temp, function(value){
       var flag = _.contains(result, value);
       if(!flag){
         result.push(value);
       }
    });
});
console.log(result);