2017-03-02 65 views
1

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

这里是对象的数组我有:

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

您可以使用循环来迭代阵列。 – brso05

+0

你尝试了什么? –

回答

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 
} 
+0

很好的解决方案。谢谢! –

+0

好的,所以我需要这个来改变表值,直到有6个或更少'table1'值。我现在有while循环如何更改表值?有没有什么办法可以做到这一点,就像你在for循环中做的那样?防爆。数据[i]中。table =“table2”; – jscoder001

+0

@ jscoder001,请在评论中扩展问题之前接受答案。实际上我没有看到为什么和改变什么样的理由。你可能会将其作为扩展参数的新问题。 –

2

你可以用这个例子:

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

太棒了!现在我可以在while循环中使用相同的条件吗? – jscoder001

+1

不,你不应该使用过滤器进行计数,这是一种错误的方法,因为你生成一个结果数组并稍后拒绝它。 –

+0

@NinaScholz哦,所以如果我使用你的方法,我怎样才能使用while循环运行,直到表1的值小于6? – jscoder001

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); 

注意这两个版本使用自动类型转换到布尔转换true1false0计数的目的。然后可以在一个条件语句中使用该函数的调用,例如。

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

好吧,我几乎有它的工作。你有什么可以告诉我如何定义一个变量来让我操作任何“table1”值?我需要将这个值移到另一个表中,因为每个表可能只有6个居住者。 – jscoder001