2017-03-03 155 views
-4

对象的JavaScript的数组删除重复我有一个对象如下所示基于密钥

var fileList = [ 
{ 
    identifier: "auto-1", 
    file: "mp.mp3" 
}, 
{ 
    identifier: "auto-2", 
    file: "ss.mp3" 
}, 
{ 
    identifier: "auto-3", 
    file: "mj.mp3" 
}, 
{ 
    identifier: "type1", 
    file: "ss.mp3" 
}, 
{ 
    identifier: "type2", 
    file: "sc.mp3" 
}, 
{ 
    identifier: "tyep3", 
    file: "mj.mp3" 
} 
] 

我试图删除数组元素。如果identifier包含文本auto,我想删除元素,如果该对象的file匹配的file包含在对象中的标识符为type1type2type3。标识符将是唯一的。

预期输出

[ 
{ 
    identifier: "auto-1", 
    file: "mp.mp3" 
}, 
{ 
    identifier: "type1", 
    file: "ss.mp3" 
}, 
{ 
    identifier: "type2", 
    file: "sc.mp3" 
}, 
{ 
    identifier: "tyep3", 
    file: "mj.mp3" 
} 
] 

我曾尝试下面的代码片段,但由消除标识符type1type2 ...等物体得到的唯一值。

_.uniq(fileList ,function(item){ return item.file + item.identifier; }) 
+0

你在看不清楚的问题,请重新制定。我不明白你需要什么。 –

+0

请清楚说明你正在寻找的是什么 – Geeky

+0

@NelsonTeixeira你可以请让我知道你到底在找什么直线前进,这里我指定了输入对象和输出对象 – Sri

回答

1

从我理解的那个小。 你可以用减少这一

检查代码片段

var fileList = [{ 
 
    identifier: "auto-1", 
 
    file: "mp.mp3" 
 
    }, 
 
    { 
 
    identifier: "auto-2", 
 
    file: "ss.mp3" 
 
    }, 
 
    { 
 
    identifier: "auto-3", 
 
    file: "mj.mp3" 
 
    }, 
 
    { 
 
    identifier: "type1", 
 
    file: "ss.mp3" 
 
    }, 
 
    { 
 
    identifier: "type2", 
 
    file: "squirrel-chatter.mp3" 
 
    }, 
 
    { 
 
    identifier: "type3", 
 
    file: "mj.mp3" 
 
    } 
 
] 
 
var fileList2 = [{ 
 
    identifier: "auto-1", 
 
    file: "mp.mp3" 
 
}, { 
 
    identifier: "type1", 
 
    file: "mp.mp3" 
 
}] 
 

 
var result; 
 

 
result = fileList2.reduce(function callback(result, key, index, keysArray) { 
 
    debugger; 
 
    let indx = result.findIndex((item) => item.file === key.file) 
 
    if (indx > -1) { 
 
    result[indx].identifier = (key.identifier.includes("type")) ? key.identifier : result[indx].identifier 
 
    } else { 
 
    result.push(key) 
 
    } 
 
    return result 
 
}, []) 
 

 
console.log(result)

希望它可以帮助

+0

感谢快速回复@Geeky,这是返回相同的列表 – Sri

+0

没有过滤输出结果...你是什么意思,同一个列表? – Geeky

+0

对不起,你是绝对正确的,我们可以做到这一点,没有硬编码'(key.identifier.includes(“类型”))',因为它将包含像'体育','电影','大学'等不同的值...而不是使用“类型”,我们可以使用'自动',因为汽车将是肯定有 – Sri

0

我不太了解您的唯一标准:您的解释和预期产出似乎有冲突。

但是至少可以尝试接受迭代函数的_.uniqByhttps://lodash.com/docs/4.17.4#uniqBy

_.uniq不,这可能是你的问题。