首页 > 解决方案 > 排列多级 Concat 选定元素并修剪为一个

问题描述

对于book,我想循环每个页面,然后是每个内容元素,修剪前导和尾随空格

var book = {
    "pages": [
        {
            "page": "1",
            "content": [" c1 ", "   c2 "],
            "note": ["n1", "n2"]
        },
        {
            "page": "2",
            "content": [" c3", "c4 "],
            "note": "any"
        },
        {
            "page": "3",
            "content": [" c5", " c6      "],
            "note": "any"
        }
    ],
    "x": 1,
    "y": 2
}

产生像这样的输出

c1
c2
c3
c4
c5
c6

此代码无法生成x

var x = book.pages.forEach(cn =>
  {
    cn.content.map(c=> c.trim());  // this line test ok
  });
var y = x.join("\n");  // error: x is undefined

标签: typescript

解决方案


问题出在forEach. 它返回未定义。map如果您期待回报,您应该使用。但由于您需要展平阵列,因此flatMap更适合:

var book = {
    "pages": [
        {
            "page": "1",
            "content": [" c1 ", "   c2 "],
            "note": ["n1", "n2"]
        },
        {
            "page": "2",
            "content": [" c3", "c4 "],
            "note": "any"
        },
        {
            "page": "3",
            "content": [" c5", " c6      "],
            "note": "any"
        }
    ],
    "x": 1,
    "y": 2
}

let contents = book.pages.flatMap(page => page.content.map(x => x.trim()))
console.log(contents.join('\n'))


推荐阅读