Как удалить повторяющиеся значения из объекта - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть объект ниже.

object1 = {name: "tony, tony", city: "Reno, Reno", country: "Canada, Canada"}

Я хочу удалить дубликаты значений в object1 и вернуться следующим образом.

 filteredObject = {name: "tony",city: "Reno", country: "Canada"}

Есть ли хороший способ для достижения этой цели

Ответы [ 4 ]

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

Объяснение

Вы можете использовать функции map и reduce для управления вашими объектными клавишами.Чтобы удалить дубликаты, вы можете использовать временный словарь , в котором будут храниться ваши ключи.Отдельные значения в строке можно найти с помощью str.split(', ').Это выглядит примерно так

Код

// Reno, Reno, Toronto => Reno, Toronto    
const removeDupsFromString = (s) => {
  const dict = s.split(', ').reduce((acc, curr) => {
    acc[curr] = true;
    return acc;
  }, {});

  return Object.keys(dict).join(', ');
}

const removeDupsFromObject = (obj) => Object.keys(obj).reduce((acc, key) => {
  acc[key] = removeDupsFromString(obj[key]);
  return acc;
}, {});

const obj = {
  name: "Tony, Tony, Stark",
  city: "Reno, Reno",
  country: "Canada, Canada"
};

console.log(removeDupsFromObject(obj));

Примечание

Это не удерживает слова в порядке, хотя, Tony, Tony, Stark может выдать Tony, Stark или Stark, Tony, так как использует Object.keys

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

Вы можете использовать Array#reduce для накопления результата после удаления повторяющихся записей из значений объекта.

Object#entries даст массивпары [ключ, значение] в объекте в виде массива.

reduce будет воздействовать на этот массив и накапливать его в новом объекте, только принимая уникальное значение.replace(/\s+/g, '') удалит все пробелы, иначе набор не будет обрабатывать слова как уникальные (учитывая случай, когда пробел может быть до или после запятой ",").

const object1 = {name: "tony, tony", city: "Reno, Reno", country: "Canada, Canada", foo: "foo, foo, bar", baz: "baz ,bar ,bar"};
//Notice the last entry in this object where space is before the comma
const obj = Object.entries(object1).reduce((acc, ele) => {
   acc[ele[0]] = [...new Set(ele[1].replace(/\s+/g, '').split(","))].join(",");
  return acc;
}, {});
console.log(obj);
0 голосов
/ 07 февраля 2019

Использование object.keys и forEach и Set

let object1 = {name: "tony, tony, stark, start, stark", city: "Reno, Reno", country: "Canada, Canada"}

let filteredObject = {}

Object.keys(object1).forEach(e=>{
  filteredObject[e] = [...new Set(object1[e].split(', '))].join(', ')
})


console.log(filteredObject)
0 голосов
/ 07 февраля 2019

Вы можете использовать цикл for..in для итерации по объекту.А затем split() каждого значения и удалите дубликаты, используя Set и Spread Synatax и join()

const obj = object1 = {name: "tony, tony", city: "Reno, Reno", country: "Canada, Canada"};
const filteredObj ={};
for(let key in obj){
	filteredObj[key] = [... new Set(obj[key].split(', '))].join(', ');
}
console.log(filteredObj)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...