javascript - 动态创建对象数组错误修复
问题描述
这是我拥有的对象数组:
var sentences = [
{ id: "1-1", layer: ["A", "X", "Y"] },
{ id: "1-2", layer: ["B", "Z"] },
{ id: "1-3", layer: ["C", "P"] },
{ id: "2-1", layer: ["D"] },
{ id: "2-2", layer: ["E"] },
{ id: "2-3", layer: ["F"] },
{ id: "3-1", layer: ["G"] },
{ id: "3-2", layer: ["H"] },
{ id: "3-3", layer: ["I"] },
];
id 中的第一个数字是幻灯片编号,第二个数字是该幻灯片上的句子。例如 id: 3-2 是幻灯片 3 和句子 2。
所以我们这里有3张幻灯片......
现在的问题是如何以编程方式填充幻灯片数组,如下所示:
var slides = [
{ slide_id: "1", slide_layer: ["A", "X", "Y", "B", "Z", "C", "P"] },
{ slide_id: "2", slide_layer: ["D", "E", "F"] },
{ slide_id: "3", slide_layer: ["G", "H", "I"] },
]
感谢@Nenad Vracar,我有这段代码可以完美地做到这一点:
var sentences = [
{ id: "1-1", layer: ["A", "X", "Y"] },
{ id: "1-2", layer: ["B", "Z"] },
{ id: "1-3", layer: ["C", "P"] },
{ id: "2-1", layer: ["D"] },
{ id: "2-2", layer: ["E"] },
{ id: "2-3", layer: ["F"] },
{ id: "3-1", layer: ["G"] },
{ id: "3-2", layer: ["H"] },
{ id: "3-3", layer: ["I"] },
];
//
let result = Object.values(sentences.reduce((r, {id, layer}) => {
let [a, b] = id.split('-');
if(!r[a]) r[a] = { slide_id: a, slide_layer: [] }
r[a].slide_layer[b - 1] = layer[0]
return r;
}, {}))
console.log(result)
问题是它只添加了层数组的第一个元素而忽略了其余的。
我试过循环这条线但没有成功: r[a].slide_layer[b - 1] = layer[i]
我怎样才能解决这个问题?
解决方案
layer[0]
您可以使用扩展语法代替使用push
整个layer
数组:slide_layer
const sentences=[{id:"1-1",layer:["A","X","Y"]},{id:"1-2",layer:["B","Z"]},{id:"1-3",layer:["C","P"]},{id:"2-1",layer:["D"]},{id:"2-2",layer:["E"]},{id:"2-3",layer:["F"]},{id:"3-1",layer:["G"]},{id:"3-2",layer:["H"]},{id:"3-3",layer:["I"]},];
const result = Object.values(sentences.reduce((r, {id, layer}) => {
let [a, b] = id.split('-');
if(!r[a]) r[a] = { slide_id: a, slide_layer: [] }
r[a].slide_layer.push(...layer)
return r;
}, {}))
console.log(result)
推荐阅读
- reactjs - 如何为 react-stripe-elements 创建 useStripe 钩子
- php - 将时间值加在一起形成总计
- c# - 在 ASP.NET Core 2.2 中获取客户端的 IP 地址
- python-3.x - 如何在python中从另一个文件导入变量
- c# - ASP.NET Core CORS WebAPI:坚持没有 Access-Control-Allow-Origin 标头
- angular - 使用角度模板两次,当更新与一个绑定的数据时,它也在更新另一个。
- java - 为什么程序打印高度值 0 而不是我设置的?
- python - 如何部署 IEX API
- continuous-integration - 如何成功地将 API 文档集成到您的构建过程中
- c - 如何使用 switch 条件来获取输入字符串的大写和小写