Javascript将值转换为键

时间:2017-03-16 15:00:53

标签: javascript ecmascript-6

我将对象的某个属性的值从列表转换为键/值列表。

我正在寻找不同的语法或更短的语法。

const lst = [{ id: 1, name: 'A' }, { id: 2, name: 'B' }];
const obj = {};
lst.forEach((per) => {
  obj[per.name] = true;
});
console.log('obj', obj);

结果:

{A: true, B: true}

4 个答案:

答案 0 :(得分:0)

您可能正在寻找array.reduce,对象传播或它的API对应Object.assign以及计算属性名称。

var obj = lst.reduce((c, v) => ({ ...c, [v.name]: true }), {});

基本上如下:

var obj = lst.reduce(function(carry, value){
  var obj = {};
  obj[value.name] = true;
  return Object.assign(carry, obj);
}, {});

答案 1 :(得分:0)

您可以使用Object.assign()和扩展语法添加到对象,在数组中,您可以map()将每个对象转换为{[e.name]: true}

const lst = [{ id: 1, name: 'A' }, { id: 2, name: 'B' }];

const obj = Object.assign({}, ...lst.map(e => ({[e.name]: true})))
console.log(obj)

答案 2 :(得分:0)

const lst = [{ id: 1, name: 'A' }, { id: 2, name: 'B' }];
const obj = lst.reduce((a, o) => (a[o.name] = true, a), {});

console.log(obj);

以上是不言自明的简称:

const obj = lst.reduce(function(accumulator, current) {
    return accumulator[current.name] = true, accumulator; // read about comma operator evaluation on MDN
}, {});

return accumulator[current.name] = true, accumulator;

与:

相同
accumulator[current.name] = true;
return accumulator;

答案 3 :(得分:0)

也许你可以在一个函数中使用它。我不太确定,但它对我有用。

    //In a fucntion
    function asingListinObject(list, obj){
      //if obj comes undefined or null create one
      if(obj == undefined || obj == null){
        obj = {};
      }
      //do the asignment by the list
      list.forEach((i_lts) => {
        //validate if the 'name' exist
        if(i_lts.name != undefined || i_lts.name != null){
          //New: set a diferent value
          if(i_lts.value != undefined || i_lts.value != null){
            obj[i_lts.name] = i_lts.value;
          }else{
            //Set a default value
            obj[i_lts.name] = true;
          }
        }
      });
      return obj;
    }

    const lst = [{ id: 1, name: 'A' }, { id: 2, name: 'B' },
    { id: 3, name: 'C', value: false }, { id: 4}];

    const obj_ref = {};
    const obj = asingListinObject(lst);
    //works as references
    asingListinObject(lst,obj_ref);


    console.log('Obj_Ref', obj);
    console.log('Obj', obj);

因此,您将拥有:

    Obj_Ref {A: true, B: true, C: false }
    Obj {A: true, B: true, C: false }

相同的值因为是相同的列表。我希望这有帮助。