如何使用值更新/分配`map`对象?

时间:2018-05-14 07:11:29

标签: javascript javascript-objects

如何迭代对象数组并按预期返回一个新对象?

在数组中有2个嵌套的对象。我想通过迭代这些对象并返回新对象来创建一个新对象。

我试过这样,但它不起作用:

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

4 个答案:

答案 0 :(得分:1)

如果我理解正确,你想从一个对象数组中创建一个对象。在这种情况下,您可以这样做:

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

    return total;
}, {});

total是一个新对象。请记住使用唯一标识符等。

答案 1 :(得分:0)

它对我有用:

const props:any = {}

datas.map(data => {
var label = data.bd.locale;
   return props[label] = data;
});

答案 2 :(得分:0)

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

答案 3 :(得分:0)

让我们说你有这个:

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