0

我有一个对象数组,例如

Item[0] ="{ id1: 1}";
Item[1] ="{ id2: 2}"; 
Item[2] ="{ id3: 3}"; 

我必须通过知道一个特定的 ID 来删除一个项目。例如,如果我得到 id2,我必须删除 Item[1]。

我试图解决它,但它删除了最后一项

for (var i = 0; i < items.length; i++) {
            var _item = items[i];
            var funcId = getValueKey(_item);

        if(funcId == _item)
        {
            delete items[i];
        }      
        };

getValueKey 函数

getValueKey: function(obj){
        for (var key in obj) {
            if (obj.hasOwnProperty(key)) {
                return key;

            }
        }
4

2 回答 2

1

您的答案可能有效,但似乎比所需的代码多得多。

function removeMemberByValue(arr, value) {

  for (var i=0, iLen=arr.length; i<iLen; i++) {

    if (arr[i] && arr[i].hasOwnProperty(value));

      //Do 1 of the following, not both:

      // to remove member i (i.e. there will no longer be a member i)
      delete(arr[i]);

      // Remove member i and shift later members -1
      arr.splice(i, 1);

      return arr;  // return is optional
  }
}

在上面,第一个选项将导致成员被删除,但所有其他成员将保持相同的索引,例如

var arr = [{id1: 1}, {id2: 2}, {id3: 3}];
removeMemberByValue(arr, value); // [not defined, {id2: 2}, {id3: 3}]

其中未定义的意思是“不存在”。

第二个选项将使后面的成员在索引中降低 1,因此:

removeMemberByValue(arr, value); // [{id2: 2}, {id3: 3}]

选择适合的。

于 2013-10-29T23:11:46.407 回答
1

我解决了,谢谢我。。

for (var i = 0; i < items.length; i++) {
            var _item = items[i];
            var funcId = getValueKey(_item);
            if(funcId ==id) {
                delete items[i];
            }
于 2013-10-29T14:46:33.813 回答