下面是我拥有的对象数组:
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.
我们有三张幻灯片..。
现在的问题是如何以编程方式填充幻灯片数组,如下所示:
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,我有这样的代码来完成这个几乎完美的工作:
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]
我怎么才能解决这个问题?
发布于 2019-08-03 15:21:06
与使用layer[0]不同,您可以使用扩展语法将整个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)
发布于 2019-08-03 15:27:59
你可以拿一张地图,然后渲染想要的对象。
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"] }],
result = Array.from(
sentences.reduce((m, { id, layer }) => {
var key = id.split('-')[0];
return m.set(key, [...(m.get(key) || []), ...layer])
}, new Map),
([slide_id, slide_layer]) => ({ slide_id, slide_layer })
);
console.log(result);.as-console-wrapper { max-height: 100% !important; top: 0; }
https://stackoverflow.com/questions/57339600
复制相似问题