ES6 - Создать новый объект из существующих данных, используя только одно свойство и удалив любые дубликаты? - PullRequest
0 голосов
/ 06 октября 2019

У меня есть массив объектов, возвращаемых мне как data, я ищу, чтобы создать новый набор данных, сохраняя старый для будущего использования.

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

data = [
    {
        "firstName": "John",
        "lastName": "Doe",
        "age": "99"
    }, 
    {
        "firstName": "Jimmy",
        "lastName": "Hendricks",
        "age": "50"
    }, 
    {
        "firstName": "William",
        "lastName": "Shakespeare",
        "age": "22"
    }, 
    {
        "firstName": "Jane",
        "lastName": "Eyre",
        "age": "50"
    }
]

То, что я хотел бы закончить, это что-то вроде этого:

newData = [
        {"age": "99"}, 
        {"age": "50"}, 
        {"age": "22"}
]

Ответы [ 4 ]

2 голосов
/ 06 октября 2019

Ух, так много подходов! Вот еще один, чисто функциональный:

data = [ { "firstName": "John", "lastName": "Doe", "age": "99" }, { "firstName": "Jimmy", "lastName": "Hendricks", "age": "50" }, { "firstName": "William", "lastName": "Shakespeare", "age": "22" }, { "firstName": "Jane", "lastName": "Eyre", "age": "50" } ]; 

console.log(
 Object.keys(data.reduce((obj,o)=>
 	    (obj[o.age]=1,obj),{}))
.map(k=>({age:k}))
)
2 голосов
/ 06 октября 2019

Или вы можете просто использовать Set для устранения дубликатов:

// ages variable contain just the ages
const ages = data.map(person => person.age);
// new Set(ages) will remove duplicated values:
const newSet = Array.from(new Set(ages)).map(age => ({ age: age }));
1 голос
/ 06 октября 2019

Вы можете использовать .map и .filter в сочетании с Set для этого:

const data = [
    {
        "firstName": "John",
        "lastName": "Doe",
        "age": "99"
    }, 
    {
        "firstName": "Jimmy",
        "lastName": "Hendricks",
        "age": "50"
    }, 
    {
        "firstName": "William",
        "lastName": "Shakespeare",
        "age": "22"
    }, 
    {
        "firstName": "Jane",
        "lastName": "Eyre",
        "age": "50"
    }
]

const newdata = data
  .map(({age}) => ({age})) // convert `{age: <value of age>}`
  .filter(function({age}) {
    const isUnique = !this.has(age); //check if already present
    this.add(age); //add anyway

    return isUnique; //filter keeping uniques
  }, new Set());//use a Set as the `this` context for the filter
  
console.log(newdata);
1 голос
/ 06 октября 2019
let newData = [];
let uniques = [];
data.forEach(el => {
    if(!uniques.includes(el.age)){
      newData.push({age: el.age});
      uniques.push(el.age);
}
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...