将对象中的静态元素附加到对象数组javascript中的每个对象

时间:2019-06-09 10:39:17

标签: javascript arrays object for-loop ecmascript-6

如何获取此对象和数组。

const data = {
    type: "hello",
    point: 1.8
};

const raw = [
    {
        x: [1, 2],
        y: [-1.1, -1.2]
    },
    {
        x: [14, 24],
        y: [-1.14, 1.24]
    }
];

然后将data对象中的项目“附加”到raw数组中的每个对象中。所需的最终结果是;

const result = [
    {
        x: [1, 2],
        y: [-1.1, -1.2],
        type: "hello",
        point: 1.8
    },
    {
        x: [14, 24],
        y: [-1.14, 1.24],
        type: "hello",
        point: 1.8
    }
];

我尝试使用map,但是此对象可用于数组,然后我使用Object.keys进行了检查,但没有运气。

3 个答案:

答案 0 :(得分:2)

使用map进行传播:

const data = {type:"hello",point:1.8};
const raw = [{x:[1,2],y:[-1.1,-1.2]},{x:[14,24],y:[-1.14,1.24]}];
const result = raw.map(e => ({ ...e, ...data }));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: auto; }

ES5语法:

var data = {type:"hello",point:1.8};
var raw = [{x:[1,2],y:[-1.1,-1.2]},{x:[14,24],y:[-1.14,1.24]}];
var result = raw.map(function(e) { 
  return Object.assign({}, e, data);
});
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: auto; }

答案 1 :(得分:1)

map确实是您想要的工具。我可能会将其与map回调参数列表中的destructuring结合使用,并在结果值中分散属性:

const result = raw.map(({x, y}) => ({x, y, ...data}));

实时复制:

const data = {
    type: "hello",
    point: 1.8
};
const raw = [
    {
        x: [1, 2],
        y: [-1.1, -1.2]
    },
    {
        x: [14, 24],
        y: [-1.14, 1.24]
    }
];
const result = raw.map(({x, y}) => ({x, y, ...data}));
console.log(result);

请注意,如果data具有任何值为 objects 的属性(在您的示例中为data没有),则使用spread将仅将引用复制到对象,它不会复制大量内容。因此,您所有的result对象都应该共享它们。如果可以的话,您可以deep copy

答案 2 :(得分:0)

我找到了解决方案;

const data = {type:"hello",point:1.8};
const raw = [{x:[1,2],y:[-1.1,-1.2]},{x:[14,24],y:[-1.14,1.24]}];
const result = raw.map(r => Object.assign(r, data));
console.log(result);

对此方法的一些反馈将不胜感激。寻找现在提供的解决方案。谢谢大家。