Как обновить / присвоить объекту `map` значение? - PullRequest
0 голосов
/ 14 мая 2018

Как перебрать массив объектов и вернуть новый объект, как и ожидалось?

В массиве есть 2 вложенных объекта. Я хотел бы создать новый объект путем итерации этих объектов и вернуть новый объект.

Я пытался так, но это не работает:

const props = datas.map(data => {
        props.data.bd.locale = data;
}, {}); //new object required

Ответы [ 4 ]

0 голосов
/ 14 мая 2018

скажем, у вас есть это:

const datas = [
    {
        fname: "jane",
        lname: "dane",
        description: {
            eyes: "blue",
            skin: "pale"
        }
    },
    {
        fname: "john",
        lname: "doe",
        description: {
            eyes: "black",
            skin: "brown"
        }
    }
]

и затем вы хотите изменить все их eyes на "зеленые":

const props = datas.map(item=>{
    const temp = {...item, description: { ...item.description, eyes: "green" } }
    return temp
})

у вас будет результат:

const datas = [
    {
        fname: "jane",
        lname: "dane",
        description: {
            eyes: "green",
            skin: "pale"
        }
    },
    {
        fname: "john",
        lname: "doe",
        description: {
            eyes: "green",
            skin: "brown"
        }
    }
]

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

ИЛИ, если вы не работаете с вложеннымобъект скажем:

const datas = [
    {
        fname: "jane",
        lname: "dane"
    },
    {
        fname: "john",
        lname: "doe"
    }
]

и затем вы хотите изменить все их lname на awesome:

const props = datas.map(item=>{
    const temp = {...item, lname: 'awesome' }
    return temp
})
0 голосов
/ 14 мая 2018

Это работает для меня:

const props:any = {}

datas.map(data => {
var label = data.bd.locale;
   return props[label] = data;
});
0 голосов
/ 14 мая 2018

Вы можете использовать команду Reduce для создания нового объекта

.
const props = datas.reduce((acc, data) => {
      acc[data.bd.locale] = data;
      return acc
}, {}); 

console.log(props);

или просто используйте forEach

const props = {}
datas.forEach((acc, data) => {
        props[data.bd.locale] = data;
});
0 голосов
/ 14 мая 2018

Если я правильно понял, вы хотите создать объект из массива объектов.В этом случае вы можете сделать это так:

const props = datas.reduce((total, data) => {
    total[data.id] = data;

    return total;
}, {});

Где total - новый объект.Не забывайте использовать уникальные идентификаторы или около того.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...