lodash.differenceBy в ванильном JavaScript? - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть два массива объектов, скажем,

var toto = [
  {a:1, b:2, c:1},
  {a:7, c:2, d:1}
]

var titi = [
  {a:2, b:2, c:1},
  {a:1, c:2, d:1}
]

Я хотел найти альтернативу lodash.differenceBy (которую я не хотел бы реализовывать только для этого случая)

в основном то, что делают

differenceBy(toto,titi, "a")
// => [{a:2, b:2, c:1}]

Я сделал фильтр с простыми параметрами, но я пытаюсь добавить объект

static DifferenceBy(arr:Array<any>, arr2:Array<any>){
    return arr.filter(function(i) {return arr2.indexOf(i) < 0;});
}

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Вы можете использовать filter и some вот так

const toto = [{a:1,b:2,c:1},{a:7,c:2,d:1}]
const titi = [{a:2,b:2,c:1},{a:1,c:2,d:1}]

function differenceBy(array1, array2, key) {
  return array1.filter(a => !array2.some(b => b[key] === a[key]))
}

console.log(differenceBy(toto, titi, "a"))

Возвращает все элементы в array1, которые не существуют в array2:

{
    "a": 7,
    "c": 2,
    "d": 1
}
0 голосов
/ 28 февраля 2019

Вы можете проверить любой источник lodash метода, перейдя к https://lodash.com и нажав Источник

Например, перейдите к https://lodash.com/docs/4.17.11#differenceBy

_.differenceBy

...