我正在尝试编写一个接收数组数组的函数,并返回一个对象,该对象将数组中的每对元素作为键值对。我搜索了堆栈溢出并提出了以下代码。但是,我的代码只返回第一个数组{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));
&#13;
答案 0 :(得分:1)
试试这个
您已在循环中声明obj
。
在迭代期间
object = Object {make: "Ford"}, i = 0
第一次迭代后你的功能
console.log(fromListToObject(array));
被调用。 这是因为你在循环中调用了返回,这应该在循环之外完成。 将代码重写为
var array = [
['make', 'Ford'],
['model', 'Mustang'],
['year', 1964]
],
i, j = array.length,
object = {}
function fromListToObject() {
for (i = 0; i < j; i++) {
var newArray = array[i];
object[i] = newArray[1];
object[newArray[0]] = object[i];
delete object[i];
}
return object;
}
console.log(fromListToObject(array));
&#13;
var array = [['make', 'Ford'], ['model', 'Mustang'], ['year', 1964]];
var obj = {};
array.forEach(function(data){
obj[data[0]] = data[1]
});
console.log(obj);
&#13;
答案 1 :(得分:1)
您的代码有几个问题。
在每次迭代中,目标对象重置为{}
。因此,您应该将var object = {}
移出您的循环。
你从循环内部返回,它立即结束它:在循环后发生。
你迭代一次太少了。删除- 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);
&#13;
如果您可以使用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);
&#13;
您可能也对ES6 Map
对象感兴趣,该对象与对象的工作方式类似,可以通过最简单的方式从数组构造:
const mp = new Map(array);
然后,您可以按如下方式访问键值:
mp.get('make') === 'Ford';
迭代:
mp.forEach( function (val, key) {
console.log(key, val);
});
答案 2 :(得分:0)
while:Not Counting!
object = {};
while( array[0] )object[ array[0][0] ] = array[0][1], array.shift();
将导致:
object;
>> Object { make: "Ford", model: "Mustang", year: 1964 }
array;
>> Array [ ]
此操作实际上将调度数组成员以修补对象! 数组内容将物理上错位到新声明的对象。