根据键

时间:2017-03-03 19:31:51

标签: javascript underscore.js

我有一个如下所示的对象

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匹配}或type1type2。标识符将是唯一的。

预期输出

type3

我尝试了以下代码段,但是通过从标识符[ { identifier: "auto-1", file: "mp.mp3" }, { identifier: "type1", file: "ss.mp3" }, { identifier: "type2", file: "sc.mp3" }, { identifier: "tyep3", file: "mj.mp3" } ] type1等中删除对象来获取唯一值。

type2

2 个答案:

答案 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函数的_.uniqByhttps://lodash.com/docs/4.17.4#uniqBy

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