我正在尝试编写一个函数,它接受一个数组数组,并返回一个对象,其中数组中的每对元素作为键值对。我搜索了堆栈溢出并提出了以下代码。但是,我下面的代码仅返回第一个数组 { make: 'Ford' }。我的代码不返回其余的数组。关于为什么我的函数不返回数组数组的其余部分有什么建议吗?
var array = [
['make', 'Ford'],
['model', 'Mustang'],
['year', 1964]
];
function fromListToObject() {
for (var i = 0; i < array.length - 1; ++i) {
var object = {};
//creates an object as a variable
var newArray = array[i];
//creates a variable for the array within the array
object[i] = newArray[1];
//sets the object of the element to position 1 of the array within the array
object[newArray[0]] = object[i];
//sets the key of the element to position 0 of the array within the array
delete object[i];
// removes the previous key of 0
return object;
}
}
console.log(fromListToObject(array));
您的代码有几个问题。
-
目标对象重置为{}
在每次迭代中。所以你应该移动var object = {}
脱离你的循环。
-
您从循环内部返回,循环立即结束:这应该发生after循环。
-
你迭代的次数太少了。去除- 1
:
for (var i = 0; i < array.length; ++i) {
-
有一个对数字属性的赋值,您稍后将其删除 2 行:这是一个成本高昂的操作,您应该避免。只需在一次操作中完成分配:
object[newArray[0]] = newArray[1];
这是所有更正的内容:
var array = [['make', 'Ford'], ['model', 'Mustang'], ['year', 1964]];
function fromListToObject() {
var object = {}; // out of the loop
for (var i = 0; i < array.length; ++i) { // iterate to last
var newArray = array[i];
object[newArray[0]] = newArray[1];
}
return object; // out of the loop
}
var obj = fromListToObject(array);
console.log(obj);
ES6版本
如果你可以使用 ES6 语法,那么考虑这个解决方案:
function fromListToObject(array) {
return Object.assign(...array.map( ([key,val]) => ({[key]: val}),{}));
}
const array = [['make', 'Ford'], ['model', 'Mustang'], ['year', 1964]];
const obj = fromListToObject(array);
console.log(obj);
使用地图
您可能还对 ES6 感兴趣Map https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Map对象,其工作方式与对象类似,可以通过最简单的方式从数组构造:
const mp = new Map(array);
然后您可以按如下方式访问键值:
mp.get('make') === 'Ford';
并迭代:
mp.forEach( function (val, key) {
console.log(key, val);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)