首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态创建一个错误修复对象数组

动态创建一个错误修复对象数组
EN

Stack Overflow用户
提问于 2019-08-03 15:17:15
回答 2查看 38关注 0票数 0

下面是我拥有的对象数组:

代码语言: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.

我们有三张幻灯片..。

现在的问题是如何以编程方式填充幻灯片数组,如下所示:

代码语言:javascript
复制
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,我有这样的代码来完成这个几乎完美的工作:

代码语言: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"] },
];

//

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]

我怎么才能解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-03 15:21:06

与使用layer[0]不同,您可以使用扩展语法将整个layer数组转换为slide_layer

代码语言:javascript
复制
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)

票数 1
EN

Stack Overflow用户

发布于 2019-08-03 15:27:59

你可以拿一张地图,然后渲染想要的对象。

代码语言: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"] }],
    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);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57339600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档