2016-06-01 41 views
0

的第一属性所以我有一个这样的结构:获取一个对象相匹配的条件

Foo: { 
    A: Array[0], 
    B: Array[0], 
    C: Array[1] 
} 

其中[X]是阵列的长度,但Foo是一个对象,而不是一个阵列,因此我不能在其上使用Array方法。

我该如何得到length > 0的第一个元素(在这种情况下是字母)?

for (let letter in Foo) { 
    if (letter.length > 0) { 
     let match = letter; 
    } 
} 

我想这样的事情(这是简化版本),但它只是返回的Foo所有属性。

+5

在对象中没有“第一个”的概念,属性没有排序。另外,* let *是作用域的范围,因此您将难以从块外部返回* match *。 – RobG

+0

@RobG条件应该返回一组符合条件的数组。我只想从这组中选出第一个。这不现实? – knitevision

+0

您可以这样做,但返回的值在不同主机上可能会有所不同,因此结果不可靠。 – RobG

回答

1

我很高兴你使用ES6。在这种情况下,你可以使用Object.keys让所有对象的键数组和Array.prototype.find与一个特定的属性找到的第一个元素:

var obj = { 
    a: [], 
    b: [], 
    c: [ 
    2, 
    3 
    ], 
    d: [], 
    e: [ 
    1 
    ] 
}; 

Object.keys(obj).find(a => obj[a].length > 0); // The letter "c" which contains the first non-empty array. 

obj[Object.keys(obj).find(a => obj[a].length > 0)]; // Array [2, 3] itself 

注意,有一个在不同实现的目标没有一致的“第一”元素。