【发布时间】:2022-01-11 10:51:26
【问题描述】:
我需要对数组进行切片并枚举值,但我还需要对原始索引的引用,因为我正在执行异步操作,完成后需要将其映射回原始数组中的原始索引。
const array = ['foo', 'bar', 'baz', 'qux', 'quux', 'corge'];
const slicedArray = array.slice(0, 3).map((v, i) => ({ v, i }));
// Returns: [{ "v": "foo", "i": 0 }, { "v": "bar", "i": 1 }, { "v": "baz", "i": 2 }]
// Required: [{ "v": "foo", "i": 0 }, { "v": "bar", "i": 1 }, { "v": "baz", "i": 2 }]
const slicedArray2 = array.slice(3, 6).map((v, i) => ({ v, i }));
// Returns: [{ "v": "qux", "i": 0 }, { "v": "quux", "i": 1 }, { "v": "corge", "i": 2 }]
// Required: [{ "v": "qux", "i": 3 }, { "v": "quux", "i": 4 }, { "v": "corge", "i": 5 }]
我怎样才能做到这一点?
【问题讨论】:
-
首先映射 then 切片,如果您想要原始索引。或者给索引添加一个偏移量。
-
或许,你只需要等待一堆promise并行解决?为此,请使用
Promise.all -
@DimaParzhitsky 是的,我使用的是
Promise.allSettled,但我不知道原始索引,因为 slice 总是会重置它,对吗? @VLAZ 不太理想,原来的数组挺大的。 -
是的,切片“重置”索引,因为它只是创建一个新数组。但是,
Promise.allSettled()不会改变项目的顺序。如果你这样做Promise.allSettled(foo(arr.slice(0, 3)), foo(arr.slice(3, 6))),你会得到两个数组,其中第一个对应索引 0-2,第二个对应索引 3-5。将结果与原始结果相匹配应该不难。您可以将所有结果和.concat()抓取到一个与原始结果匹配的数组中(例如,也可以覆盖它)。
标签: javascript arrays slice