好的,所以我有一个对象数组。使用随机生成的表值定义哪个。我想搜索对象数组并执行代码,如果有一个表值,例如。 “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: ""
},
];
答案 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
}