将具有数组属性的对象展平为一个数组的最佳方法

时间:2017-04-13 11:45:39

标签: javascript arrays object underscore.js lodash

想象一下我有

const obj = {
  arr_a: [9, 3, 2],
  arr_b: [1, 5, 0],
  arr_c: [7, 18]
}

将此对象转换为简单数组的最佳方法是什么:

[9, 3, 2, 1, 5, 0, 7, 18]

我试过了:

[].concat(obj.arr_a, obj.arr_b, obj.arr_c)

但我想知道lodashunderscore中是否有某些内容可以执行此操作。类似的东西:

_.flatAsArray(obj);

或:

obj.toFlatArray();

5 个答案:

答案 0 :(得分:1)

要获取对象中所有键的值,可以使用_.values

使用ES6

[].concat(..._.values(obj))

使用_.flatten

_.flatten(_.values(obj))

答案 1 :(得分:1)

您可以使用flatMap获取所有这些值。

var result = _.flatMap(obj);



const obj = {
  arr_a: [9, 3, 2],
  arr_b: [1, 5, 0],
  arr_c: [7, 18]
};

var result = _.flatMap(obj);

console.log(result);

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

怎么样:

_.flatten(_.values(obj));

答案 3 :(得分:0)

您可以使用Object.valuesArray#reduce

&#13;
&#13;
var obj = { arr_a: [9, 3, 2], arr_b: [1, 5, 0], arr_c: [7, 18] },
    result = Object.values(obj).reduce((r, a) => r.concat(a));

console.log(result);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;

答案 4 :(得分:0)

您可以使用Object.values使用reducing

迭代对象值spread operator
Object.values(obj).reduce((result, val) => [...result, ...val], [])