假设我有一个看起来像这样的数组:
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的开发人员工具,但在我尝试编译代码时则不行。
答案 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"] }]