【发布时间】:2016-03-18 11:56:31
【问题描述】:
我需要将一个数组或数组数组转换为一个对象,该对象的键名是从名称数组中命名的。示例:
//given names
names = ['first', 'second', 'third', 'fourth']
//array
param = [1, 2, 3, 4]
//becomes
result = {first: 1, second: 2, third: 3, fourth: 4}
//array of arrays
param = [
[1, 2, 3, 4],
[-4, 3, 1, 32],
]
//becomes
result = [
{first: 1, second: 2, third: 3, fourth: 4},
{first: -4, second: 3, third: 1, fourth: 32},
]
我目前的解决方案是这样的:
var names = ['first', 'second', 'third', 'forth'];
function arrayToObject(array, names) {
var result = {};
for (var i = 0; i < array.length; i++) {
if (typeof array[i] === 'object') {
result[i] = arrayToObject(array[i], names);
continue;
}
result[names[i]] = array[i];
}
return result;
}
这个解决方案的问题是它总是返回一个对象,尽管当我传入一个数组数组时它应该返回一个对象数组。有没有办法用 lodash 做到这一点,我没有看到它?
【问题讨论】:
-
您的副本和结果不匹配。副本未声明。
-
已修复,忘记重命名
-
那就没问题了。您将结果声明为对象。写 if 语句:result = [] if array, result = {} if hash
-
谢谢,我知道。这就是为什么我要求像 lodash 解决方案这样的东西,因为它尽可能简洁:)
-
正如我在下面提到的,
_.zipObject()很简洁。
标签: javascript arrays object lodash