2013-01-12 33 views
2

我有对象的数组,看起来像这一点,但有点大:删除整个对象,如果一个属性有一定的价值

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

我需要从数组中删除特定对象充分的一种方式。是否有可能识别对象的索引,根据财产的价值?拼接方法看起来像它可以工作,如果是这样的话。

total.splice(x,1); 

否则也许我可以以某种方式使用下面?可以在阵列中的对象被赋予名字和这个莫名其妙使用:

delete total[]; 
+0

你可以有对象中的对象,至极意味着你可以以某种方式对象或索引它设置一个名称,如果这就是你的后? – Richard

回答

3

不能确定你的问题是什么。你首先要找到你要删除哪个项目:

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); 

我假设在数组中至少有一个对象匹配条件。

+0

@tucuxi:nope,['splice()'](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/splice)就地修改参数并仅返回已移除的元素 –

+0

作者golly,你是对的。我正在用slice()的返回来弄错它。 – tucuxi

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] 
    } 
} 
1

该功能用于删除第一个对象与object.keyName ===值数组

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; 
} 
0

,除非你用冒号,而不是equals-

你的对象将不会被初始化你可以过滤一个数组,返回的数组不包含任何值,但那些通过了一些测试的值。

这将返回花费美元以上的项目的数组:

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' 
    } 
] 
1

对于ES5兼容的浏览器,你可以使用filter()。例如。删除所有项目成本< 6:

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

谢谢。这解决了我的问题。 – sg552

相关问题