开发者问题收集

从数组创建 Json 对象

2018-01-10
6548

使用以下代码,我尝试将可变长度的数组转换为对象,其中位置 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)

fiddle: 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 和 ob2 已定义,此错误与哪个有关?

3个回答

您可以将索引变量增加 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);
Nina Scholz
2018-01-10

正如错误试图告诉您的那样, ob2.arr 不存在。

您可能需要具有该名称的属性,即

ob2[arr[i]]
SLaks
2018-01-10

您的错误在于:

ob2.arr...

并且不需要执行:

i = i + 1

由于您在 for 循环声明中递增 i ( i++ )

您想要:

ob2[arr[i]] = arr[i+1]

请注意,如果您保持原样,您将超出界限,因此请执行:

for (let i = 1; i < arr.length; i+=2) {
   ob2[arr[i-1]] = arr[i]
}
mad.meesh
2018-01-10