3

私はこのように見えるが少し大きいオブジェクトの配列を持っています:

var total =   [{ cost="6.00",  descrip="tuna"},{ cost="5.50",  descrip="cod"}];

配列から特定の完全なオブジェクトを削除する方法が必要です。プロパティの値に基づいて、オブジェクトのインデックスを識別することは可能ですか?スプライスメソッドは、そうであれば機能するように見えます。

total.splice(x,1);

そうでなければ、おそらく私はどういうわけか以下を使用することができますか?配列内のオブジェクトに名前を付けて、これで何らかの方法で使用できますか?

delete total[];
4

5 に答える 5

5

あなたの問題が何であるか本当にわかりません。まず、削除するアイテムを見つける必要があります。

function findItem(arr) {
  for(var i = 0; i < arr.length; ++i) {
    var obj = arr[i];
    if(obj.cost == '5.50') {
      return i;
    }
  }
  return -1;
}

このfindItem(total)関数は、要素一致条件のインデックスを返しcost == '5.50'ます(もちろん、別の条件を使用できます)。今、あなたは何をすべきかを知っています:

var i = findItem(total);
total.splice(i, 1);

条件に一致するオブジェクトが配列に少なくとも1つあると想定しています。

于 2013-01-12T19:27:01.347 に答える
4

ES5準拠のブラウザの場合は、を使用できますfilter()。たとえば、コストが6未満のすべてのアイテムを削除するには:

total = total.filter(function(item) {
  return item.cost < 6.0; 
});

編集:またはES6環境のさらに簡潔なバージョン:

total = total.filter(item => item.cost < 6.0);
于 2013-01-13T00:10:36.973 に答える
1

この関数は、object.keyName===valueを持つ配列の最初のオブジェクトを削除します

function deleteIfMatches(array, keyName, value) {
    for (i=0; i<array.length; i++) {
        if (array[i][keyName] === value) {
           return array.splice(i, 1);
        }
    }
    // returns un-modified array
    return array;
}
于 2013-01-12T19:30:03.967 に答える
0

equalsの代わりにコロンを使用しない限り、オブジェクトは初期化されません-

配列をフィルタリングできます。返される配列には値は含まれていませんが、テストに合格した値が含まれています。

これにより、1ドル以上かかるアイテムの配列が返されます。

var total= [{
    cost:"6.00", descrip:"tuna"
},{
    cost:"5.50", descrip:"cod"
},{
    cost:".50", descrip:"bait"
}
].filter(function(itm){
return Number(itm.cost)>= 1;
});

/ *戻り値:

[{
        cost:'6.00',
        descrip:'tuna'
    },{
        cost:'5.50',
        descrip:'cod'
    }
]
于 2013-01-13T00:04:20.523 に答える
0

私は誤解しているかもしれませんが、これは非常に単純ではありません。なぜスプライスしたいのですか?

var i = 0,
  count = total.length;

// delete all objects with descrip of tuna
for(i; i < count; i++) {
  if (total[i].descrip == 'tuna') { 
      delete total[i]
  }
}
于 2013-01-12T19:29:59.990 に答える