基本上在Javascript中执行`where`子句的最佳方法是什么?

Ear*_*rlz 9 javascript arrays json

我正在尝试解析发送给我的一些JSON,它的格式都是

[{key:value},{key2:value2}, ... ]
Run Code Online (Sandbox Code Playgroud)

获得此价值的最佳方法是key2什么?有没有办法在不进行for循环的情况下完成它?

Pau*_*ips 8

您可以使用Underscore.js库中的Select函数.

  • 这不是需要为一个特定案例加载整个库(尽管很小)吗? (3认同)
  • 不需要整个库,只需对数组执行“filter()”即可。 (2认同)

小智 7

Javascript Array 附带的方法可以满足您的要求 - 无需编写 for 循环即可查找条目。

你为他们提供你想要的条件。一种紧凑且方便的方法是使用箭头(或“lambda”)函数。在您的情况下,您正在寻找具有特定键的数组条目,因此箭头函数可能如下所示:

e => e.hasOwnProperty("key2")
Run Code Online (Sandbox Code Playgroud)

跟随其他一些人的带领,让我们从假设开始

var arr = [{key:"value"}, {key2:"value2"}, {key3:"value3"}]
Run Code Online (Sandbox Code Playgroud)

如果您期望数组中最多有一个成员拥有您想要的键,则可以使用该find()函数。它将测试每个数组成员,直到找到满足条件的成员,然后将其返回。如果没有一个是真的,你会得到undefined.

var foundentry = arr.find(e => e.hasOwnProperty("key2"))
Run Code Online (Sandbox Code Playgroud)

要么foundentry将是undefined,要么它将是{key2:"value2"}您正在寻找的内容,并且可以value2从中提取。


如果arr可以有多个包含您正在查找的密钥的条目,则不要find()使用filter(). 它返回一系列符合您条件的条目。

var foundarray = arr.filter(e => e.hasOwnProperty("key2"))
Run Code Online (Sandbox Code Playgroud)


lau*_*ent 6

不是真的,但创建一个功能并不难.但是,它确实涉及一个for循环.

为了完成,这将是功能:

function selectWhere(data, propertyName) {
    for (var i = 0; i < data.length; i++) {
        if (data[i][propertyName] !== null) return data[i][propertyName];
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

用法:

var key2value = selectWhere(data, "key2");
Run Code Online (Sandbox Code Playgroud)