我有這兩個陣列,我需要獲得 c. 我設法獲得了一個具有兩個 fors 和條件的解決方案,但我確信使用 JS 可以獲得比 O^2 更好的東西。
a = [3, 2, 1, 3]
b = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
c = [['a', 'b', 'c'], ['d', 'e'], ['f'], ['g', 'h', 'i']]
uj5u.com熱心網友回復:
為了好玩,我以一種巧合的方式寫了它,希望你喜歡它:
const a = [3, 2, 1, 3];
const b = ["a", "b", "c", "d", "e", "f", "g", "h", "i"];
const bClone = [...b];
const array = a.map((num, index) =>
Array.from({ length: num }, () => bClone.shift())
);
console.log(array);
當然應該添加控制元件,謝謝
uj5u.com熱心網友回復:
一種可能性是與 結合map,splice注意不要改變原始陣列:
const a = [3, 2, 1, 3];
const b = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'];
function slices(sizes, arr){
const clonedArr = [].concat(arr); // clone array to prevent mutation
return sizes.map(size => clonedArr.splice(0,size));
}
console.log(slices(a,b)); // [['a', 'b', 'c'], ['d', 'e'], ['f'], ['g', 'h', 'i']]
或者,完全避免突變,您可以使用稍微復雜的reduce:
const slicesByReduce = (sizes, arr) => sizes
.reduce(({start, acc}, size) => ({
start: start size,
acc: [...acc, arr.slice(start, start size)]
}),{
start: 0,
acc: []
}).acc;
console.log(slicesByReduce(a,b)); // [['a', 'b', 'c'], ['d', 'e'], ['f'], ['g', 'h', 'i']]
uj5u.com熱心網友回復:
我在演算法方面沒有那么好的背景,但我認為這比兩個 fors 更好:
let a = [3, 2, 1, 3]
,b = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
let head = 0
let result = a.map((e) => {
let subArr = b.slice(head,head e)
head =e
return subArr
})
console.log(result)
uj5u.com熱心網友回復:
迭代您的“大小”陣列并將第二個陣列的切片放入結果中,如下所示:
const a = [3, 2, 1, 3]
const b = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
const c = [];
var index = 0;
for (var size of a) {
c.push(b.slice(index, index size));
index = size;
}
console.log(c)
//c = [['a', 'b', 'c'], ['d', 'e'], ['f'], ['g', 'h', 'i']]
此外,如果您要在 JavaScript 中使用陣列,請查看:
- 用 var、let 和 const 初始化變數
- 使用推()
- for 回圈
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/457430.html
標籤:javascript
下一篇:JS陣列中的對數
