从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/
答案 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 */
})
});
(*有些浏览器确实支持for each (variable in object)
构造,但它现在是deprecated。for(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
}
解决方案:创建一个对象数组(不是单元素数组):
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);
}
旁注:这并不需要jQuery。