如何在JavaScript中将数组值分配给对象作为键值

时间:2019-06-12 06:35:28

标签: javascript arrays object ecmascript-6

我收到以下形式的请求:

req = {
"id": ["1","2"],
"values": ["fruit", "vegies"]
}

我要发送以下响应:

res = {
"idMap": {
    "1": ["fruit", "veggies"],
    "2": ["fruit", "veggies"]
}
}

我尝试使用地图功能,但值以 [数组] 而不是 [“水果”,“蔬菜”] 出现。我附上以下代码:

const values = req.values
const id = req.id.map((ids) => {
    const idmap = {
        [ids]: values
    }
    return idmap;
});
req = {
    "idMap": id
}

帮我这个家伙。在此先感谢。

2 个答案:

答案 0 :(得分:2)

您应该使用reduce来创建对象-map返回一个数组。

const req = {
  "id": ["1", "2"],
  "values": ["fruit", "vegies"]
};

const res = {
  idMap: req.id.reduce((a, c, i) => (a[c] = [...req.values], a), {})
};

console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }

您还可以遍历数组并分配结果对象的属性:

const req = {
  "id": ["1", "2"],
  "values": ["fruit", "vegies"]
};

let res = {
  idMap: {}
};

let values = req.values;
req.id.forEach((id, index) => res.idMap[id] = [...values]);

console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }

答案 1 :(得分:0)

您可以使用(即将到来的)Object.fromEntries从映射的条目中生成一个对象。

var req = { id: ["1", "2"], values: ["fruit", "vegies"] },
    res = { idMap: Object.fromEntries(req.id.map(k => [k, req.values])) };

console.log(res);