使用下面的代码我试图将一个可变长度的数组转换为一个对象,其中位置i的项目是对象名称,位置i + 1的项目是项目值。例如:
arr = [];
arr.push('a');
arr.push(1);
arr.push('b');
arr.push(2);
arr.push('c');
arr.push(3);
/* Want to create an object that is of type : */
var ob = {a:1 , b:2 , c:3}
console.log(ob)
以下是我试图通过以下方式实现此目的的代码:
var ob2 = {}
for (var i = 0; i < arr.length; i++) {
ob2.arr[i] = arr[i + 1]
i = i + 1
}
但收到错误:
(index):63 Uncaught TypeError: Cannot set property '0' of undefined
at window.onload ((index):63)
小提琴:https://jsfiddle.net/wxkkjzm0/
arr = [];
arr.push('a');
arr.push(1);
arr.push('b');
arr.push(2);
arr.push('c');
arr.push(3);
/* Want to create an object that is of type : */
var ob = {a:1 , b:2 , c:3}
console.log(ob)
var ob2 = {}
for (var i = 0; i < arr.length; i++) {
ob2.arr[i] = arr[i + 1]
i = i + 1
}
console.log(ob2);
arr&amp;定义了这个错误属于哪个?
答案 0 :(得分:2)
您可以将索引变量增加2
,因为您需要一对来分配键/值对。
var array = ['a', 1, 'b', 2, 'c', 3],
object = {},
i
for (var i = 0; i < array.length; i += 2) {
object[array[i]] = array[i + 1];
}
console.log(object);
答案 1 :(得分:1)
由于错误试图告诉您,ob2.arr
不存在。
您可能想要具有该名称的属性,即
ob2[arr[i]]
答案 2 :(得分:0)
你的错误是:
ob2.arr...
并且没有必要这样做:
i = i + 1
,因为您在i
循环演绎(for
)中递增i++
你想要:
ob2[arr[i]] = arr[i+1]
请注意,如果你这样做,你将会离开界限:
for (let i = 1; i < arr.length; i+=2) {
ob2[arr[i-1]] = arr[i]
}
答案 3 :(得分:0)
破坏性的while循环方法
var arr = ['a', 1, 'b', 2, 'c', 3],
ob={};
while(arr.length ){
ob[arr.shift()] = arr.shift();
}
console.log(ob)
&#13;
答案 4 :(得分:0)
由于您确定配对值与index和index + 1匹配,请尝试以下代码:
arr = [];
arr.push('a');
arr.push(1);
arr.push('b');
arr.push(2);
arr.push('c');
arr.push(3);
console.log(arr);
var ob2 = {};
for (var i = 0; i < arr.length/2; i++) {
ob2[arr[i*2]] = arr[(i*2) + 1];
}
console.log(ob2);
// output : {a:1 , b:2 , c:3};
关键是将迭代长度除以2,并且对于每个索引,使用该索引的数组值作为对象的新索引值,并将索引乘以2并将结果加1,以获得下一个索引的数组值。