2014-11-20 41 views
-5

我有多个对象的Javascript:遍历数组获取对象属性的每个元素

"status": [ 
    { 
     "feature": "sun", 
     "color": "yellow", 
    }, 
    { 
     "feature": "rain", 
     "color": "grey", 
    }, 

我想每个“功能”返回属性“颜色”的值 输出数组将返回:“黄色”和“灰色”

我真的不知道如何下手......

感谢


+0

开始一个循环! – Mathletics 2014-11-20 23:12:22

+0

作为一个字符串('“黄色灰色”')或作为一个数组('[“黄色”,“灰色”]')?还是其他什么东西? – 2014-11-20 23:16:41

回答

1

使用本:

for (var i = 0; i < yourObject.status.length; i++) 
{ 
    console.log(yourObject.status[i].color); 
} 

也许你应该开始at the beginning与循环如何工作的?

+0

谢谢@DavidMüller。我应该在我的问题上更加清楚......对不起。 我实际上试图根据'功能'返回'颜色'。例如,循环遍历包含'sun'的元素将返回'黄色'。如果status.feature ===“rain”返回颜色(并且它应该返回'gray' – Eric 2014-11-20 23:34:14

+0

我仍然认为我不确定你想实现什么,如果这个特性是“rain”,那么你想返回这个颜色?在这种情况下? – 2014-11-20 23:39:10

+0

为一个功能,它应该返回相关的颜色 我试图根据该功能填充2个不同句子中的2个颜色值,所以它是一个条件的循环 if feature = sun,return color(黄色) 如果功能=下雨,返回颜色(灰色) 我可能没有看到非常明显的东西.... – Eric 2014-11-20 23:40:42

0

您可以使用filter

filter返回一个数组,因此,如果您确信只会有一个1:特征之间的相关性1 /颜色只返回的第一个元素的颜色值:

function getColor(feature) { 
    return obj.status.filter(function (el) { 
    return el.feature === feature; 
    })[0].color; 
} 

getColor('sun'); // yellow 
getColor('rain'); // grey 

DEMO

+0

我很喜欢这个想法@安迪!虽然我得到'obj没有定义' – Eric 2014-11-21 01:00:15

0

试试这个

var obj = { 
    // ... 
    "status": [ 
     { 
      "feature": "sun", 
      "color": "yellow" 
     }, 
     { 
      "feature": "rain", 
      "color": "grey" 
     } 
    ] 
    // ... 
} 

// Array 
var r1 = obj.status.map(function(obj) {return obj.color}) 

// String 
var r2 = obj.status.map(function(obj) {return obj.color}).join(' ') 

console.log(r1, r2)