JavaScript:在对象数组中搜索特定值

JavaScript:在对象数组中搜索特定值,javascript,arrays,sorting,object,javascript-objects,Javascript,Arrays,Sorting,Object,Javascript Objects,好的,我有一个对象数组。使用随机生成的表值定义。如果一个表值(例如“table1”)出现6次以上,我想搜索对象数组并执行代码 以下是我拥有的对象数组: var data = [{ name: "", pref: "", table: "" }, { name: "",

好的,我有一个对象数组。使用随机生成的表值定义。如果一个表值(例如“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: ""
                },
            ];

您可以使用以下示例:

if (data.filter((item)=>{return item.table === "1"}).length >= 6)
你可以用它来计算条件

ES6

ES5


。。。如果我使用您的方法,如何使用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
}

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

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

实际上,这些对象都有相同的值。。。您有问题吗?您可以使用循环来迭代数组。您尝试了什么?只需在数组上运行一个筛选器,data=data.filter(x=>{return x.name=='value\u I\u want'})。完成后,如果该数组的长度大于等于6,请运行代码。或者,如果不想分配新数组,则迭代该数组,查找属性,如果找到该属性,则增加一个计数器,当该计数器为===6时,中断循环并运行代码。@NinaScholz这些值都是在代码后面定义的。太好了!现在我可以在while循环中使用相同的条件了吗?不,你不应该使用filter进行计数,这是错误的方法,因为你生成了一个结果数组,然后拒绝了它。@NinaScholz噢,那么如果我使用你的方法,我如何使用while循环运行,直到表1的值小于6?这是一个很好的解决方案。谢谢好的,我需要这个来更改表值,直到有6个或更少的“table1”值。我现在有了while循环如何更改表值?有没有类似于for循环的方法?例数据[i].table=“table2”@jscoder001,在评论中扩展问题之前,请接受答案。事实上,我看不出有什么理由和什么性质需要改变。您可能会觉得这是一个带有扩展参数的新问题。@NinaScholz抱歉,我不熟悉这个问题,但我并没有要求您更改代码。我只是需要一些关于while循环的指导。我应该把这当作另一个问题问吗?这更像是一个问题,你想要什么。在问题中,您要求出现6次以上,现在您需要6次或更少。也许你可以用一个例子来说明你在一个新问题中需要什么。好吧,我几乎可以用了。你有没有可能告诉我如何定义一个变量,让我可以操作“表1”中的任何值?我需要将该值移动到另一个表中,因为每个表可能只有6名用户。
function countTable(value) {
    return function (sum, item) {
        return sum + (item.table === value);
    };
}


while (data.reduce(countTable('table1'), 0) >= 6) {
    // do something
}
function multiFind( array, property, value , count) {
    return array.some( function( c) {
        count -= c[property] == value;
        return count<=0;
    });
}
var multiFind =  (a, prop, v, n) => a.some( c=> (n-=c[prop] == v)<=0);
while( multiFind( data, "table", "table1", 6) ) {
    // do stuff while there are more than 5 "table1" table properties in data array
}