[英]How to Convert a nested array to an object
我想从仅2级深的嵌套数组中创建一个对象。 我想出的功能返回
[{ key1: 'value1', key2: 'value2' }]
而不是
[{ key1: 'value1' }, {key2: 'value2' }]
我也尝试用obj[elem[0]] = elem[1];
替换if语句obj[elem[0]] = elem[1];
但得到相同的结果。
如何为每个嵌套数组创建单独的对象?
var array = [["key1", "value1"], ["key2", "value2"]]
function nestedArrToObj(array){
let obj = {};
for (let i=0; i < array.length;i++) {
let elem = array[i];
if (!(obj[elem[0]])) {
obj[elem[0]] = elem[1]
}
}
return [obj];
}
使用功能map
let array = [["key1", "value1"], ["key2", "value2"]]; let result = array.map(([key, value]) => ({[key]: value})); console.log(result)
.as-console-wrapper { max-height: 100% !important; top: 0; }
使用功能reduce
let array = [["key1", "value1"], ["key2", "value2"]]; let result = array.reduce((a, c) => { let [key, value] = c; return [...a, {[key]: value}]; }, []); console.log(result)
.as-console-wrapper { max-height: 100% !important; top: 0; }
跨浏览器和后端技术兼容的方法:
var array = [["key1", "value1"], ["key2", "value2"]]; var result = []; for(var a of array) { var value = a.pop(); var key = a.pop(); var object = {}; object[key] = value; result.push(object); } console.log(result)
.as-console-wrapper { max-height: 100% !important; top: 0; }
这是map
的版本:
console.log( [["key1", "value1"], ["key2", "value2"]] .map(x => {let obj = {}; obj[x[0]] = x[1]; return obj;}) )
该语言的一些新功能使此操作变得容易一些。 这是一个ES5解决方案。
var array = [["key1", "value1"], ["key2", "value2"]] function nestedArrToObj(array){ return array.reduce(function(previous, current) { let obj = {}; obj[current[0]] = current[1]; previous.push(obj); return previous; }, []); } console.log(nestedArrToObj(array))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.