私は次のようなアイテムの配列を持っています:
var items = [id: "animal", type: "cat", cute: "yes"]
そして、指定されたIDに一致するアイテムをすべて削除しようとしています。この場合; animal
私は立ち往生しています!より単純な配列を使用することで簡単に機能させることができますが、これは必要なものではありません...インデックスでアイテムを参照する手間をかけたくないので、値でアイテムを削除する必要もあります。
Items配列を反復処理する必要がなく、セレクターを指定する必要がある場合に使用できるjQueryメソッドはありますか?
これが私のjsFiddleです: http://jsfiddle.net/zafrX/
配列項目をインデックスで参照するのがどれほど面倒かわかりません。配列アイテムを削除する標準的な方法は、 スプライスメソッド を使用することです。
for (var i = 0; i < items.length; i++)
if (items[i] === "animal") {
items.splice(i, 1);
break;
}
そしてもちろん、これをヘルパー関数に一般化できるので、これをどこにでも複製する必要はありません。
[〜#〜]編集[〜#〜]
私はこの間違った構文に気づきました:
var items = [id: "animal", type: "cat", cute: "yes"]
このようなものが必要でしたか:
var items = [ {id: "animal", type: "cat", cute: "yes"}, {id: "mouse", type: "rodent", cute: "no"}];
これにより、削除コードが次のように変更されます。
for (var i = 0; i < items.length; i++)
if (items[i].id && items[i].id === "animal") {
items.splice(i, 1);
break;
}
これにはjQueryやサードパーティのライブラリは必要ありません。新しいES5フィルターを使用できるようになりました。
let myArray = [{ id : 'a1', name : 'Rabbit'}, { id : 'a2', name : 'Cat'}];
myArray = myArray.filter(i => i.id !== 'a1');
splice
を使用するか、自分で削除を実行できます。次に例を示します。
for (var i = 0; i < items.length; i ++) {
if (items[i] == "animal") {
items.splice(i, 1);
break;
}
}
簡単な方法があります!
myItems.splice(myItems.indexOf(myItems.find(row => row.id == id)), 1);
以下のデモ:
// define function
function delete_by_id(id) {
var myItems = [{
id: 1,
type: "cat",
cute: "yes"
}, {
id: 2,
type: "rat",
cute: "yes"
}, {
id: 3,
type: "mouse",
cute: "yes"
}];
// before
console.log(myItems);
myItems.splice(myItems.indexOf(myItems.find(item => item.id == id)), 1);
// after
console.log(myItems);
}
// call function
delete_by_id(1);
このようにする必要があります(正しい構文であることを確認してください...プロパティを持つ配列を持つことはできませんが、{}
内のオブジェクトを使用すると、キーで反復して不要なキーを削除できます):
var items = {id: "animal", type: "cat", cute: "yes"}
var removeItem = "animal"; // or with the ID matching animal...
for(var p in items){
if(items[p] === removeItem)
delete items[p]
}
そして、あなたの質問に答えるために、jqueryセレクターをjavascriptオブジェクトに適用することはできません。 for
ループを回避するためにできる最善の方法は、 $ .each (より「機能的な」方法で記述されたループ)を使用することです。
オブジェクト表記を使用する場合: http://jsfiddle.net/jrm2k6/zafrX/2/
var animal1 = {id: "animal", type: "cat", cute: "yes"}
var car2 = {id: "car", type: "pick-up", cute: "no"}
var animal3 = {id: "animal", type: "dog", cute: "yes"}
var removeItem = "animal"; // or with the ID matching animal...
var array_items = []
array_items.Push(animal1);
array_items.Push(car2);
array_items.Push(animal3);
for(var i=0;i<array_items.length;i++){
if(array_items[i].id == removeItem){
array_items.splice(i,1);
}
}
//alert(array_items.length);
-parray : list of array of object
-pstring :value to remove from the array
-ptag :using which tag we
function removeFromArr (parray,ptag,pstring){
var b =[];
var count = 0;
for (var i =0;i<parray.length;i++){
if(pstring != parray[i][ptag]){
b[count] = parray[i];
count++;
}
}
return b;
}
var lobj = [ {
"SCHEME_CODE": "MIP65",
"YEARS": "1",
"CURRENCY": "GBP",
"MAX_AMT": 200000,
"MIN_AMT": 1000,
"AER_IR": "1.80",
"FREQUENCY": "Monthly",
"CUST_TYPE": "RETAIL",
"GROSS_IR": "1.79"
},
{
"SCHEME_CODE": "MIP65",
"YEARS": "2",
"CURRENCY": "GBP",
"MAX_AMT": 200000,
"MIN_AMT": 1000,
"AER_IR": "1.98",
"FREQUENCY": "Monthly",
"CUST_TYPE": "RETAIL",
"GROSS_IR": "1.96"
},
{
"SCHEME_CODE": "MIP65",
"YEARS": "3",
"CURRENCY": "GBP",
"MAX_AMT": 200000,
"MIN_AMT": 1000,
"AER_IR": "2.05",
"FREQUENCY": "Monthly",
"CUST_TYPE": "RETAIL",
"GROSS_IR": "2.03"
},
{
"SCHEME_CODE": "MIP65",
"YEARS": "5",
"CURRENCY": "GBP",
"MAX_AMT": 200000,
"MIN_AMT": 1000,
"AER_IR": "2.26",
"FREQUENCY": "Monthly",
"CUST_TYPE": "RETAIL",
"GROSS_IR": "2.24"
},
{
"SCHEME_CODE": "QIP65",
"YEARS": "1",
"CURRENCY": "GBP",
"MAX_AMT": 200000,
"MIN_AMT": 1000,
"AER_IR": "1.80",
"FREQUENCY": "Quarterly",
"CUST_TYPE": "RETAIL",
"GROSS_IR": "1.79"
},
{
"SCHEME_CODE": "QIP65",
"YEARS": "2",
"CURRENCY": "GBP",
"MAX_AMT": 200000,
"MIN_AMT": 1000,
"AER_IR": "1.98",
"FREQUENCY": "Quarterly",
"CUST_TYPE": "RETAIL",
"GROSS_IR": "1.97"
},
]
function myFunction(){
var final = removeFromArr(lobj,"SCHEME_CODE","MIP65");
console.log(final);
}
<html>
<button onclick="myFunction()">Click me</button>
</html>
オブジェクトから削除しようとしています
function removeFromArr(parray, pstring, ptag) {
var farr = [];
var count = 0;
for (var i = 0; i < pa.length; i++) {
if (pstring != pa[i][ptag]) {
farr[count] = pa[i];
count++;
}
}
return farr;
}
うわー、非常に多くのアイデアがまだ私が望んでいたものではありませんxD
これにより、指定された値のすべてのエントリが削除され、削除された値が返されます。
function removeOfArray(val, arr){
var idx;
var ret;
while ((idx = arr.indexOf(val)) > -1){
arr.splice(idx, 1);
ret = val;
}
return ret;
}
また、ここで他の解決策を見つけました: 値によって配列からアイテムを削除します