.Map Array中的数组

时间:2018-06-11 10:01:36

标签: javascript reactjs

enter image description here

我试图过滤数据,但我在数组中有一个数组,我不知道我怎么能得到那些!还有一个名为'toString'的属性,这可能是一个问题(功能)

        const filterteste = this.state.example.changelog.histories.map(item => (
        {
          id: item.id,            
          created: item.created,
          field: item.items.field,
          fromStringprop: item.items.fromString,
          toStringprop: item.items.toString,
        }
      ));

所需的输出: 我试图过滤数组soo我有一个干净的数组,我需要的属性

{
   created: 
   id:
   field:
   fromString:
   toString:
}

问题: enter image description here

2 个答案:

答案 0 :(得分:1)

const filterteste = this.state.example.changelog.histories.map(item => {
    //instead of returning a single item, we return an array!
    return item.items.map(childItem => {
        return {
            id: item.id,            
            created: item.created,
            field: childItem.field,
            fromStringprop: childItem.fromString,
            toStringprop: childItem.toString,
        };
    });
});

使用此代码,您将映射基础数组元素,并将每个元素作为子元素的映射返回 - 这是否有意义?

在此之后你仍然会有一个数组,如下所示:

[
    [
        //item1,
        //item2
    ],
    [
        //item3
    ]
]

此时我们可以在此数组上调用reduce以获得我们预期的结果......

let resultOfArrayMap = theMapFunctionFromTopOfThePost(baseArray);
const properlyMappedArray = resultOfArrayMap.reduce((arrayBeingBuilt, currValue) => {
    return arrayBeingBuilt.concat(...currValue);
}, []);

这是从一个空数组开始,对于映射数组中的每个项,它将新数组中的所有子项连接起来,然后继续到下一个项并继续将其他项连接到通过处理前一个元素返回的数组。 ..

现在应该是这样的:

[
    //item1,
    //item2,
    //item3
]

答案 1 :(得分:1)

您可以简单地将其过滤为

 const filterteste = this.state.example.changelog.histories.map(item => (
        {
          id: item.id,            
          created: item.created,
          field: item.items.field,
          fromStringprop: item.items.filter((item)=> return item.fromString != null),
          toStringprop: item.items.filter((item)=> return item.toString != null)
        }
      ));