我有一个如下所示的对象
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
与标识为{{1}的对象中包含的file
匹配}或type1
或type2
。标识符将是唯一的。
预期输出:
type3
我尝试了以下代码段,但是通过从标识符[
{
identifier: "auto-1",
file: "mp.mp3"
},
{
identifier: "type1",
file: "ss.mp3"
},
{
identifier: "type2",
file: "sc.mp3"
},
{
identifier: "tyep3",
file: "mj.mp3"
}
]
,type1
等中删除对象来获取唯一值。
type2
答案 0 :(得分:1)
从我明白的一点点开始。 你可以使用reduce来实现这个
检查代码段
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)
希望有所帮助
答案 1 :(得分:0)
我不太明白你的唯一性标准:你的解释和预期的输出似乎有冲突。
但至少,尝试接受iteratee函数的_.uniqBy
。 https://lodash.com/docs/4.17.4#uniqBy
_.uniq
没有,这可能是你的问题。