8

私が何かを持っているなら

[Object(id:03235252, name:"streetAddress"), Object(id:32624666, name:"zipCode")...]

名前が「zipCode」に設定されている配列からオブジェクトを削除するにはどうすればよいですか?

4

5 に答える 5

14

既存の配列を変更する必要がある場合は、splice().

for (var i = array.length - 1; i > -1; i--) {
    if (array[i].name === "zipCode")
        array.splice(i, 1);
}

逆にループしていることに注意してください。.splice(i, 1)これは、 を実行すると配列のインデックスが再作成されるという事実に対処するためです。

順方向ループを実行した場合、インデックスをスキップしないようにするために、実行するiたびに調整する必要もあります。.splice()

于 2012-10-31T14:48:31.750 に答える
9
arr = arr.filter(function (item) {
  return (item.name !== 'zipCode');
});
于 2012-10-31T14:45:51.350 に答える
2

更新された提案

配列でプロトタイプを実行することは悪い習慣であるため、この回答を更新しました。そのため、提案を使用してより良いコードを書く人々をここに配置することをお勧めします。

const myArr = [
  {
    name: "lars",
    age: 25
  }, {
    name: "hugo",
    age: 28
  }, {
    name: "bent",
    age: 24
  }, {
    name: "jimmy",
    age: 22
  }
];

const findAndRemove = (array, prop, value) => {
  return array.filter((item) => item[prop] !== value);
}

const newArr = findAndRemove(myArr, 'name', 'jimmy')

console.log(newArr)

新しいコードはここで見つけてテストできます

古い提案

これは、アレイのプロトタイプでも実行できます

Array.prototype.containsByProp = function(propName, value){
      for (var i = this.length - 1; i > -1; i--) {
        var propObj = this[i];
          if(propObj[propName] === value) {
            return true;
        }
      }
    return false;
} 

var myArr = [
  {
    name: "lars",
    age: 25
  }, {
    name: "hugo",
    age: 28
  }, {
    name: "bent",
    age: 24
  }, {
    name: "jimmy",
    age: 22
  }
];

console.log(myArr.containsByProp("name", "brent")); // Returns false
console.log(myArr.containsByProp("name", "bent")); // Returns true

コードはここで見つけてテストすることもできます

于 2015-10-01T11:03:03.717 に答える
2
var i = array.length;
while(i-- > 0) {
    if (array[i].name === "zipCode")
        array.splice(i, 1);
}
  • 配列を逆方向にループします (スプライシング時にインデックスをスキップする必要はありません)。
  • 「zipCode」の場合は、各アイテムの名前を確認してください
    • そうである場合は、を使用してスプライスしyourArray.splice(index,1)ます。

次に、次のいずれかを行います。

  • 値「zipCode」を持つ名前が複数ある可能性がある場合は続行します
  • ループを壊す
于 2012-10-31T14:45:50.023 に答える