操作对象数组时出现TS2345错误

时间:2016-12-15 22:16:45

标签: javascript arrays typescript

假设我有一个看起来像这样的数组:

let arr = [{field: ["alice"]}, {field : ["bob", "charlie"]}

我希望能够在不编写嵌套for循环的情况下连接所有值。 到目前为止我已经这样做了:

arr.reduce((a, b) => a.field.concat(b.field))

问题,正如我所看到的那样,数组的类型,比方说arr : Array<MyObject>,在映射或类似的东西时会发生变化。

我收到了TS2345错误

  

...不能分配给类型的参数...

为了清楚起见,结果应该是以下结果的身份。

let result = [];
for (let i = 0; i < arr.length; i++) {
    for (let j = 0; j < arr[i].field.length; j++) {
        result.push(arr[i].field[j])
    }
}
抱歉,我无法分享我的真实代码,但这是确切的问题。 由于某些原因,这适用于Chrome的开发人员工具,但在我尝试编译代码时则不行。

2 个答案:

答案 0 :(得分:2)

const arr: Array<MyObject> = [{ field: ["alice"] }, { field: ["bob", "charlie"] }];

const result: Array<string> = arr.map(obj => obj.field)
                                 .reduce((a, b) => a.concat(b));

答案 1 :(得分:0)

嗯,结果将是:

select * from movies m
where m.id in (select movie_id from movies_genre join genres on (movies_genere.genre_id = genres.id) where genres.genre = 'Comedy')
and m.id in (select movie_id from movies_genre join genres on (movies_genere.genre_id = genres.id) where genres.genre = 'Action & Adventure')

当我想你想要的时候:

["alice", "bob", "charlie"]

这将通过以下方式计算:

[{fields: ["alice", "bob", "charlie"] }]