如何将数组中键的值设置为另一个数组中的键?

时间:2019-11-24 16:51:37

标签: javascript arrays json

我试图从数组feature_1中获取键name的值data并将feature_1设置为另一个数组asset的键,有一个数组作为值。

示例:

//input:

data: {
   name: "feature_1",
   value_a: 1,
   value_b: 2
}

//Output:

asset: {
    feature_1:[1,2]
}

3 个答案:

答案 0 :(得分:0)

您可以尝试:

var asset = {};
if ('name' in data) {
    var tmp = [];
    for (k in data){
        if (k != 'name') tmp.push(data[k]);
    }
    asset[data['name']] = tmp;
}

并且如果您的解释器支持ES6,则可以使用,例如:

let {name, ...v} = data;
let asset = {[name]: Object.values(v)};

答案 1 :(得分:0)

如果在JSON对象中支持相同的键(似乎不支持),您可以这样做:

let data= {
   name: "feature_1",
   value_a: 1,
   value_b: 2,
   value_x: 500,
   name: "feature_2",
   value_a: 17,
   value_b: 21,
   value_x: 510
}

console.log(
  Object.entries(data).reduce((a,[key,value],index)=>{
    if (key==='name')
      return {index, assets: {...a.assets, [value]:[]}};

    return {
      index : a.index,
      assets : {
        ...a.assets,
        [Object.entries(a.assets)[a.index][0]] : [...Object.entries(a.assets)[a.index][1],value]
      }};
  },{index:0,assets:{}}).assets
);

但是我们知道正确的方法是使用分开的数组行。

答案 2 :(得分:-1)

这可以通过以下方式完成:

const obj = {
  data: {
    name: "feature_1",
    value_a: 1,
    value_b: 2
  }
};

const output = {
  assets: {
    [obj.data.name]: Object.values(obj.data).filter(el => el !== obj.data.name)
  }
}

console.log(output);

相关问题