0

2 つの配列 (data と data_not_included) があります。これらの配列の各要素には、id と name の属性があります。私はこのようにそれらを埋めます:

data[i] = {
           name :products.models[i].get('name'),
           id :  products.models[i].get('id')
          };

ここで、data_not_included 配列にないデータの要素を表示したいと思います。たとえば、私は

data=[{name: Sugar}{id: 1},{name: Butter}{id: 2},{name: Cola}{id: 3}]
// and
data_nat_included = [{name: Sugar}{id: 1},{name: Butter}{id: 2}].

表示{name: Cola}{id: 3}のみにする必要があります。

これが私がすでに行ったことです:

for(var j=0;j<data_not_icluded.length;j++)
{
    for(var i=0;i<data.length;i++)
    {
        if(data[i].id != data_not_icluded[j].id ){
          //but this doesnt work for me it displayes a lot of element many times
        }
     }
}
4

3 に答える 3

0
for(var j=0;j<data_not_icluded.length;j++)
    for(var i=0;i<data.length;i++)
        if(data[i].id != data_not_icluded[j].id )

これが何をするか考えてみてください: 含まれていないオブジェクトの場合、現在含まれていないオブジェクトと同じ ID を持たないすべてのオブジェクトを表示します。これにより、多くのアイテムが複数回表示され、「含まれていない」が別の位置にあるオブジェクトが表示されます。

代わりに、 をループしてdata、 に含まれていないことをそれぞれ確認し、data_not_includedそれ以外の場合は表示します。

dataloop: for (var i=0; i<data.length; i++) {
    for (var j=0; j<data_not_included.length; j++)
        if (data[i].id == data_not_icluded[j].id)
            continue dataloop;
    display(data[i]);
}

または、Arrays のいくつかの反復メソッドを使用します。

data.filter(function(d) {
    return data_not_included.every(function(n) {
        return d.id != n.id;
    });
}).each(display);
于 2013-10-12T13:34:58.363 に答える