转换对象数组中的单个元素

时间:2017-03-09 14:52:56

标签: javascript ecmascript-6

我正在尝试转换对象列表中给定键的所有元素。具体更改是将通用object转换为具有相同值的Long对象。

输入:

[obj1, obj2, obj3, ...]

每个对象的位置如下:

{
    key1: value1, // value1 is an object
    key2: value2
}

所以这里的目标是获得一个非常相似的数组,但key1object转换为long对象,在我的例子中加1。

输出:

[obj1, obj2, obj3]

每个对象的位置:

{
    key1: value1, // value1 is now a Long object
    key2: value2
}

我尝试在数组上进行映射,然后遍布对象条目,但没有成功。

任何帮助都将受到高度赞赏。

4 个答案:

答案 0 :(得分:1)

除非您想再创建一个新数组,否则您不需要在此处进行映射。简单循环就足够了,只需更新key1或每个对象:

[obj1, obj2, obj3].forEach(obj => {
  obj.key1 = obj.key1 + 1
})

答案 1 :(得分:0)

由于数组包含对象 - 对对象的任何修改都反映了传递的实际输入。您需要复制对象并执行逻辑。

你的逻辑,

var input = [obj1, obj2, obj3];
var output = input.map(function(obj){
    obj.key1 = obj.key1 + 1;
    return obj;
});

console.log(input[0]===output[0]); //true

<强>解决方案:

var output = input.map(function(obj){
    var _objCopy = Object.assign({}, obj);
    _objCopy.key1 = _objCopy.key1 + 1;
    return _objCopy;
});

console.log(input[0]===output[0]); //false

答案 2 :(得分:0)

如何动态地对任何对象es6方式的第一个键

 const myObject0 = {
           'foo1': { name: 'myNam1' },
           'foo2': { name: 'myNam2' }
        };

        const myObject1 = {
           'yo': { name: 'myNam1' },
           'boh': { name: 'myNam2' }
        };


        [myObject0, myObject1].forEach(obj => {
            let getFirstKey = Object.keys(obj)[0];
            getFirstKey = getFirstKey + 1;
            console.log(getFirstKey);

        });

答案 3 :(得分:0)

感谢所有答案的人。

我最终得到了以下内容:

给出输入

[
    {
        key1: value1, // value1 is an object
        key2: value2
    },

    {
        key1: value1, // value1 is also an object
        key2: value2
    }
]

<强>解决方案: 我结束了,

  const testvar = [obj1, obj2, obj3].map((obj) => {
    return {
      ...obj,
      key1: new Long.fromValue(obj.key1)
    }
  });

  console.log(testvar);

给出输出

[
    {
        key1: value1, // value1 is now a Long object
        key2: value2
    },

    {
        key1: value1, // value1 is also now a Long object
        key2: value2
    }
]