从对象数组中过滤元素

时间:2016-11-12 01:42:08

标签: javascript

我有一个像下面的对象数组

Object[0]

canUpload:false
canBeRemoved:true
  type:Object
    allowMultiple:false
    deleted:false
    key:"testValue"

Object[1]
canUpload:true
canBeRemoved:true
 type:Object
   allowMultiple:false
   deleted:false
   key:"testValue2"

我想从数组中删除包含key:testValue

的元素
var myValues = this.testData.data3;

        if(!this.testData.canDownload){
  myValues= myValues.filter(function(value){
                    if(!value.canUpload)
                        return value.type.key==='testValue';
                else return false;
                });

但它没有删除。是什么方法做到了? 这是完整的代码。我可以看到大小为2的myValues数组。如果我打印myValues,如果阻止它为空。 代码笔:http://codepen.io/developer301985/pen/woGBNg

2 个答案:

答案 0 :(得分:1)

如果您想根据以下两个条件过滤数组:

  • canUpload attr是假的
  • type.key等于' testValue'

所以如果return false符合以下条件,您可能希望canUpload

myValues= myValues.filter(function(value) {
  if(!value.canUpload)
    return value.type.key === 'testValue';
  else return false;
});

否则,您只想过滤type.key等于' testValue' ,所以它将如下:

myValues= myValues.filter(function(value) {
  return value.type.key === 'testValue';
});

答案 1 :(得分:0)

注意,如果传递给filter的回调函数返回true,则将保留元素而不是删除元素。因此,在您的情况下,当值为testValue时,您应该返回false。

如果我理解正确,您想删除value.canUpload==falsetype.key === 'testValue'的项目。然后否定是value.canUpload || value.type.key !== 'testValue'

var myValues = this.testData.data3;

if (!this.testData.canDownload) {
    myValues = myValues.filter(function(value) {
        return value.canUpload || value.type.key !== 'testValue';
    });
}

让我知道它是否有效:)