从数组创建Json对象

时间:2018-01-10 19:29:21

标签: javascript jquery

使用下面的代码我试图将一个可变长度的数组转换为一个对象,其中位置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;定义了这个错误属于哪个?

5 个答案:

答案 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循环方法

&#13;
&#13;
var arr = ['a', 1, 'b', 2, 'c', 3],
    ob={};

while(arr.length ){
  ob[arr.shift()] = arr.shift();
}

console.log(ob)
&#13;
&#13;
&#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,以获得下一个索引的数组值。