将JavaScript对象值复制到javascript中的关联数组中

时间:2014-01-11 10:43:35

标签: javascript

从JavaScript对象到关联数组的值。以下是我想要做的一个示例。

$(window).load(function() {
  items = [
    {title: 'Paint pots'},
    {title: 'Polka dots'},
    {title: 'Pebbles'}
  ];
  var test;       
  for(var item in items) {
    test=[{name:item.title}];
  }
  for(item in test) {
    alert(item.title);
  }
});

但代码无法正常运行。任何人都可以指出这里的错误吗?


这是我小提琴的链接:http://jsfiddle.net/MACxav/9xJdD/

2 个答案:

答案 0 :(得分:2)

以下是导致问题的一些错误

var test; - 您尚未初始化test

for(var item in items) - 这里的每个item都是一个键,所以它是0,1,2。它不是像有些人预期的那样来自items数组的项目。

test=[{name:item.title}]; - 您在此处覆盖测试变量,而不是将项添加到数组中,或者(如果这是您想要的)将item.title分配给name键< / p>

for(item in test) - 与之前相同,此处的item不是对象,而是密钥。

[编辑,合并我之前的回答,有些编辑]

代码片段($(window).load)的开头表明你正在使用jQuery,所以我在jQuery对象上使用each函数*。

$(document).ready(function() {
  items = [
    {title: 'Paint pots'},
    {title: 'Polka dots'},
    {title: 'Pebbles'}
  ];
  var test = []; /* initialize as array */
  $.each(items, function(idx, item) 
  {
    test.push({name:item.title}); /* add to array rather than overwrite */
  })
  $.each(test, function(idx, item) {
    console.log(item.name); /* use console instead of alert, because we're not savages */
  })
});

http://jsfiddle.net/2JwpL/

(*有些浏览器确实支持for each (variable in object)构造,但它现在是deprecatedfor(variable of object) is proposed for EcmaScript 6

答案 1 :(得分:1)

问题:您的代码正在创建一个数组数组(每个数组包含一个对象)。除非您覆盖test,因此它是一个单个对象数组的单个对象数组。

这与您的代码运行方式相同,但具有所需的效果。请注意,最后,代码更难理解:

items = [ // array of three objects
    {title: 'Paint pots'},
    {title: 'Polka dots'},
    {title: 'Pebbles'}
];

var test = new Array(); // an array

for(var i=0; i < items.length; i++) {
    test[i]=[{name:items[i].title}];  // test[i] = an ARRAY with a single object
}                                     // which has a single property

for(var i = 0; i < test.length; i++) {
    alert(test[i][0].name); // get test's i-th array's first item's name property
}

Demo of complicated code

解决方案:创建一个对象数组(不是单元素数组):

items = [
    {title: 'Paint pots'},
    {title: 'Polka dots'},
    {title: 'Pebbles'}
];

var test = new Array();       

for(var i=0; i < items.length; i++) {
    test[i]={name:items[i].title}; // put one OBJECT into test[i]
}

for(var i = 0; i < test.length; i++) {
    alert(test[i].name);
}

Demo of simple code

旁注:这并不需要jQuery。