将数组合并到 JavaScript 中的 object 个属性中

Merge array into object properties in JavaScript

我有一个小问题,我有两个像这样的简单 object

var state = {
    Value1: "Something",
    Value2: "Else"
};


var claims = [
    "Viewing",
    "Editing",
    "Delete"
];

我想创建一个看起来像这样的 object。

var newState = {
    Value1: "Something",
    Value2: "Else",

    /* Array merged into properties with defaults. */
    Viewing: true,
    Editing: true,
    Delete: true
};

我考虑过使用 jQuery $.map() 或者 Object.assign() (这似乎更接近我想要的)但我似乎无法确切地弄清楚如何实现我想要的结果需要。

如标题所述,如何将数组合并到现有 object 作为属性,同时设置默认值?

您可以添加一个 属性 使用带有 obj[myStringAsName] = value

的变量名

var state = {
    Value1: "Something",
    Value2: "Else"
};


var claims = [
    "Viewing",
    "Editing",
    "Delete"
];

var newState = state;
claims.forEach(function(item){
 newState[item] = true;
})

console.log(newState)

对于简单的给定示例,请尝试以下操作:

var state  = {Value1:"Something",Value2:"Else"}; 
    claims = ["Viewing","Editing","Delete"];

let res = Object.assign(state, claims.reduce((a,c) => {a[c] = true; return a},{}))
console.log(res)

我使用 reduce 将数组转换为对象并合并了两个对象

var state = {
    Value1: "Something",
    Value2: "Else"
};


var claims = [
    "Viewing",
    "Editing",
    "Delete"
];
var obj = claims.reduce(function(acc, cur) {
            acc[cur] = true;
            return acc;
          }, {});

var returnedData = Object.assign(state, obj);

console.log(returnedData)

您可以使用解构和简单的 Array#forEach

const state = {
    Value1: "Something",
    Value2: "Else"
};


const claims = [
    "Viewing",
    "Editing",
    "Delete"
];

const newState = {
  ...state
}

claims.forEach(prop => newState[prop] = true);

console.log(newState)