通过动态键和值创建数组

时间:2018-10-03 09:40:48

标签: javascript angular typescript

我在变量中获取字符串中的值,即

let name = 'Vishesh';
let name2 = 'Vishesh2';

和数组,即

let cars = [{carName: "Mercedes"},{carName: "Volvo"},{carName:"BMW"}];

现在我要创建一个数组,其中我的键是名称,值在里面,应该有cars数组,即

Array=[{Vishesh: [{carName: "Mercedes"},{carName: "Volvo"},{carName:"BMW"}]},{Vishesh2: [{carName: "Mercedes"},{carName: "Volvo"},{carName:"BMW"}]}];

5 个答案:

答案 0 :(得分:3)

let name = 'Vishesh';
let name2 = 'Vishesh2';
let cars = [{carName: "Mercedes"},{carName: "Volvo"},{carName:"BMW"}];
let array = []

array.push({[name]:cars})
array.push({[name2]:cars})
console.log(array);

答案 1 :(得分:2)

您可以将名称直接插入到字典结构中作为键。

let name = 'Vishesh';
let name2 = 'Vishesh2';
 
console.log([
  {
    [name]: [
      { carName: "Mercedes" },
      { carName: "Volvo" },
      { carName:"BMW" }
    ]
  },
   {
    [name2]: [
      { carName: "Mercedes" },
      { carName: "Volvo" },
      { carName:"BMW" }
    ]
  }
]);

但是您可以更加动态地执行此操作

let name = 'Vishesh';
let name2 = 'Vishesh2';
let cars = [
  { carName: "Mercedes" },
  { carName: "Volvo" },
  { carName:"BMW" }
];

function keyByNames(names, cars) {
  let named = {}
  names.forEach(name => {
    named[name] = JSON.parse(JSON.stringify(cars))
  })
  return named
}

console.log(keyByNames([ name, name2 ], cars));

答案 2 :(得分:1)

怎么样(假设只有两个名字):

let obj1 = {};
obj1[name] = cars;

let obj2 = {};
obj2[name2] = cars;

var array = [obj1, obj2];

请注意:两个对象都引用相同的数组。因此,更改数组将在两个位置“更新”数组(因为它是通过引用获得的。)

但是,如果您希望使用一组动态名称,则代码应如下所示:

var names = ["Vishesh", "Vishesh2", "Vishesh3"];

var array = [];
for(var i = 0; i < names.length; i++) {
    var name = names[i];

    var obj = {};
    obj[name] = cars;

    array.push(obj);
}

答案 3 :(得分:1)

在您的汽车阵列上使用reduce函数也可以解决。

let names = ["Wishes1", "Wishes2", "Wishes3"]

let cars = [{carName: "Mercedes"},{carName: "Volvo"},{carName:"BMW"}];

const withNames = (names) => (currentMapState, currentItem, currentIndex) => {
	currentMapState[names[currentIndex]] = currentItem;
  return currentMapState;
}

console.log(cars.reduce(withNames(names), {}));

此外,withNames函数易于测试。祝你有美好的一天。

答案 4 :(得分:0)

如果始终有两个名称:

const Array = [
  { [name]: cars },
  { [name2]: cars }
]