Удалить элементы из массива объектов, если они имеют одинаковое значение ключа - PullRequest
0 голосов
/ 28 февраля 2020

Я изо всех сил пытаюсь заставить эту вещь работать. У меня есть массив объектов, подобных этому:

let myCities = [
  {
    value: 'Barcelona',
    code: 02342837492482347
  },
  {
    value: 'Rome',
    code: 28282716171819
  },
  {
    value: 'Barcelona',
    code: 67246726482
  },
  {
    value: 'Paris',
    code: 12319808080
  },  
]

Я хотел бы удалить все элементы, которые имеют одинаковый ключ value, но оставить первый. Таким образом, у меня будет такой результат:

let myCities = [
  {
    value: 'Barcelona',
    code: 02342837492482347
  },
  {
    value: 'Rome',
    code: 28282716171819
  },
  {
    value: 'Paris',
    code: 12319808080
  },  
]

Какие решения приходят вам на ум? Спасибо!

Ответы [ 4 ]

0 голосов
/ 28 февраля 2020
var myCities = [
  {
    value: 'Barcelona',
    code: 02342837492482347
  },
  {
    value: 'Rome',
    code: 28282716171819
  },
  {
    value: 'Barcelona',
    code: 67246726482
  },
  {
    value: 'Paris',
    code: 12319808080
  },  
];
    var arr = []; var res = [];
    for(var i = 0; i<myCities.length;i++){
      if(!arr.includes(myCities[i].value)){
        res.push(myCities[i]);
        arr.push(myCities[i].value);
      }
    }
0 голосов
/ 28 февраля 2020

Вы можете попробовать подчеркивание js

let myCities = [
  {
    value: 'Barcelona',
    code: 02342837492482347
  },
  {
    value: 'Rome',
    code: 28282716171819
  },
  {
    value: 'Barcelona',
    code: 67246726482
  },
  {
    value: 'Paris',
    code: 12319808080
  },  
]

console.log(_.uniq(myCities, x => x.value));
<script src="http://underscorejs.org/underscore-min.js"></script>
0 голосов
/ 28 февраля 2020

let myCities = [
      {
        value: 'Barcelona',
        code: 02342837492482347
      },
      {
        value: 'Rome',
        code: 28282716171819
      },
      {
        value: 'Barcelona',
        code: 67246726482
      },
      {
        value: 'Paris',
        code: 12319808080
      },  
    ]

    function uniqueByKey(objArr) {
      let tmp = {};
      for(let i = 0; i < objArr.length; i++) {
         let elem = objArr[i];
         if(typeof tmp[elem.value] === "undefined") {
          tmp[elem.value] = true;
          continue;
         }
         objArr.splice(i, 1)
         i--;
      }
    }

    uniqueByKey(myCities)
    console.log(JSON.stringify(myCities));
0 голосов
/ 28 февраля 2020

У меня есть два!

Для одного вы можете временно использовать Объект со значением города в качестве ключа и code в качестве значения. Затем итерация по myCities с использованием forEach() и заполнение объекта. После этого сопоставьте этот объект обратно с массивом, используя Object.keys(tempObj).map().

Вторая идея будет идти прямо с filter и создайте второй массив из myCities. Третий аргумент содержит входной массив (= myCities). Но даже здесь вам понадобится какая-то бухгалтерия ...

...