如何从对象中删除重复的值

时间:2019-02-07 04:58:20

标签: javascript object filter

我在下面有一个物体。

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

我想删除object1中的重复值并返回如下。

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

有什么好的方法可以实现这一目标吗?

4 个答案:

答案 0 :(得分:4)

您可以使用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)

答案 1 :(得分:2)

说明

您可以使用mapreduce函数来操作对象键。为了删除重复项,您可以使用临时字典来保存您的密钥。可以使用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, StarkStark, Tony,因为它使用Object.keys

答案 2 :(得分:1)

从对象值中删除重复的条目后,可以使用Array#reduce来累积结果。

Object#entries将对象中的[key,value]对数组作为数组。

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);

答案 3 :(得分:0)

使用object.keysforEachSet

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)