JavaScript:搜索特定值的对象数组

时间:2017-03-02 21:30:09

标签: javascript arrays sorting object javascript-objects

好的,所以我有一个对象数组。使用随机生成的表值定义哪个。我想搜索对象数组并执行代码,如果有一个表值,例如。 “table1”发生超过6次。

这是我拥有的对象数组:

  var data = [{
                    name: "",
                    pref: "",
                    table: ""
                },
                {
                    name: "",
                    pref: "",
                    table: ""
                },
                {
                    name: "",
                    pref: "",
                    table: ""
                },
                {
                    name: "",
                    pref: "",
                    table: ""
                },
                {
                    name: "",
                    pref: "",
                    table: ""
                },
                {
                    name: "",
                    pref: "",
                    table: ""
                },
                {
                    name: "",
                    pref: "",
                    table: ""
                },
                {
                    name: "",
                    pref: "",
                    table: ""
                },
                {
                    name: "",
                    pref: "",
                    table: ""
                },
                {
                    name: "",
                    pref: "",
                    table: ""
                },
                {
                    name: "",
                    pref: "",
                    table: ""
                },
                {
                    name: "",
                    pref: "",
                    table: ""
                },
                {
                    name: "",
                    pref: "",
                    table: ""
                },
                {
                    name: "",
                    pref: "",
                    table: ""
                },
                {
                    name: "",
                    pref: "",
                    table: ""
                },
                {
                    name: "",
                    pref: "",
                    table: ""
                },
                {
                    name: "",
                    pref: "",
                    table: ""
                },
                {
                    name: "",
                    pref: "",
                    table: ""
                },
                {
                    name: "",
                    pref: "",
                    table: ""
                },
                {
                    name: "",
                    pref: "",
                    table: ""
                },
                {
                    name: "",
                    pref: "",
                    table: ""
                },
                {
                    name: "",
                    pref: "",
                    table: ""
                },
                {
                    name: "",
                    pref: "",
                    table: ""
                },
                {
                    name: "",
                    pref: "",
                    table: ""
                },
            ];

3 个答案:

答案 0 :(得分:2)

您可以使用此示例:

if (data.filter((item)=>{return item.table === "1"}).length >= 6)

答案 1 :(得分:1)

您可以使用Array#reduce进行条件计数。

ES6

if (data.reduce((sum, item) => sum + (item.table === "1"), 0) > 6) {
    // do something
}

ES5

if (data.reduce(function (sum, item) { return sum + (item.table === "1"); }, 0) > 6) {
    // do something
}
  

...如果我使用你的方法怎样才能运行while循环运行,直到表1的数量小于6?

你可以使用一个while循环,在该值上有一个闭包来检查。

function countTable(value) {
    return function (sum, item) {
        return sum + (item.table === value);
    };
}


while (data.reduce(countTable('table1'), 0) >= 6) {
    // do something
}

答案 2 :(得分:0)

如果找到足够的匹配元素,您也可以使用Array.prototype.some停止计数。

function multiFind( array, property, value , count) {
    return array.some( function( c) {
        count -= c[property] == value;
        return count<=0;
    });
}

或者,可以将其压缩并以ES6语法编写为

var multiFind =  (a, prop, v, n) => a.some( c=> (n-=c[prop] == v)<=0);

请注意,两个版本都使用自动类型转换将布尔true转换为1,将false转换为0以进行计数。然后可以在条件语句中使用对函数的调用,例如。

while( multiFind( data, "table", "table1", 6) ) {
    // do stuff while there are more than 5 "table1" table properties in data array
}