2015-11-10 58 views
-5

[{name: "apple", color:["green", "red"]}, {name: "banana", color:["yellow"]}]。 使用for循环?是否可以访问所有颜色阵列中的所有颜色?

代码,我试图: for (i = 0; i < color.length; i++) { return color.length; }

+1

是你可以使用一个循环来迭代阵列。我会从这里开始阅读:http://eloquentjavascript.net/02_program_structure.html#h_FaGGgUI+MM。 –

+0

这是我试过的,但它不工作:for(i = 0; i Ann

+0

我越来越没有定义。这是错误。 – Ann

回答

1

可以使用映射函数为对象的数组,然后一个for循环为每个对象的内部属性的“颜色”。

var fruits = [{ 
    name: "apple", 
    color: ["green", "red"] 
}, { 
    name: "banana", 
    color: ["yellow"] 
}]; 

var colors = []; 

fruits.map(function(fruit) { 
    for (var i = 0; i <  fruit.color.length; i++) { 
     colors.push(fruit.color[i]); 
    } 
}); 
+0

谢谢大家。这对我来说很简单。 – Ann

+1

此方法只会从每个颜色数组中获得第一个颜色 – Divide100

+0

@Ann不客气。 –

0

您可以通过对象数组中使用for循环来循环,然后串联每个对象的颜色为彩色阵列:

var colorArr = []; 
 
var arr = [{name: "apple", color:["green", "red"]}, {name: "banana", color:["yellow"]}]; 
 
for(var i in arr) { 
 
    if(arr[i]['color']){ 
 
    colorArr = colorArr.concat(arr[i]['color']); 
 
    } 
 
}

+0

抬头。这种方法工作 – Ann

2

这里是一个整洁方式做我认为你想要的:

var all_colors = [{name: "apple", color: ["green", "red"]}, 
       {name: "banana", color: ["yellow"]}].reduce(function(a, b) { 
    return a.concat(b.color); 
}, []); 

// Note: this line uses ES6 
var colors = Array.from(new Set(all_colors)); 

输出所有颜色的数组,删除重复:

enter image description here

+0

出于好奇,为什么downvote? – Todd

+1

我不知道我正在向正在回答的人提出问题。这是stackoverflow需要对仅仅是错误的答案带来严格的负面指导。加一个给你。 – Ann

+2

这对我来说似乎是一个很好的解决方案。 –

相关问题