新聞動(dòng)態(tài)
如何在 JavaScript 中用初始值填充數(shù)組
常見(jiàn)問(wèn)題 發(fā)布者:ou3377 2021-12-15 09:14 訪問(wèn)量:144
假設(shè)我們想用給定值初始化一個(gè)長(zhǎng)度為3的數(shù)組。
array.fill() 方法可以用一個(gè)固定值填充一個(gè)數(shù)組中從起始索引到終止索引內(nèi)的全部元素。
再結(jié)合使用 Array(n):
const length = 3;
const filledArray = Array(length).fill(0);
filledArray; // [0, 0, 0]
Array(length).fill(initialValue) 是一種創(chuàng)建具有所需長(zhǎng)度并使用原始值(數(shù)字、字符串、布爾值)初始化的數(shù)組的便捷方法。
如果需要用對(duì)象填充數(shù)組怎么辦?
上述方法同樣支持傳遞對(duì)象為初始值:
const length = 3;
const filledArray = Array(length).fill({ value: 0 });
filledArray; // [{ value: 0 }, { value: 0 }, { value: 0 }]
Array(length).fill({ value: 0 })創(chuàng)建一個(gè) length 數(shù)組3,并為每個(gè)項(xiàng)目分配{ value: 0 },要注意的是:分配相同的對(duì)象實(shí)例。
這種方法創(chuàng)建了一個(gè)具有相同對(duì)象實(shí)例的數(shù)組。如果碰巧修改了數(shù)組中的任何一項(xiàng),那么數(shù)組中的每一項(xiàng)都會(huì)受到影響:
const length = 3;
const filledArray = Array(length).fill({ value: 0 });
filledArray; // [{ value: 0 }, { value: 0 }, { value: 0 }]
filledArray[1].value = 3;
filledArray; // [{ value: 3 }, { value: 3 }, { value: 3 }]
改變數(shù)組的第二個(gè)項(xiàng)目filledArray[1].value = 3會(huì)改變數(shù)組中的所有項(xiàng)目。
Array.from() 方法對(duì)一個(gè)數(shù)組或可迭代對(duì)象創(chuàng)建一個(gè)新的,淺拷貝的數(shù)組實(shí)例。
因此利用 Array.from() 方法可以輕松地創(chuàng)建和初始化具有不同對(duì)象實(shí)例的數(shù)組:
const length = 3;
const filledArray = Array.from(Array(length), () => {
return { value: 0 };
});
filledArray; // [{ value: 0 }, { value: 0 }, { value: 0 }]
如果修改數(shù)組中的任何項(xiàng)目,則只有該項(xiàng)目會(huì)受到影響,其他項(xiàng)目不受影響:
const length = 3;
const filledArray = Array.from(Array(length), () => {
return { value: 0 };
});
filledArray; // [{ value: 0 }, { value: 0 }, { value: 0 }]
filledArray[1].value = 3;
filledArray; // [{ value: 0 }, { value: 3 }, { value: 0 }]
filledArray[1].value = 3 只修改數(shù)組的第二項(xiàng)。
既然 Array(n) 返回一個(gè)數(shù)組,為何還需要使用 Array.from 呢,直接使用 map 不好嗎,問(wèn)題是 array.map()跳過(guò) empty 元素:
const length = 3;
const filledArray = Array(length).map(() => {
return { value: 0 };
});
filledArray; // [empty × 3]
解決方法很簡(jiǎn)單,將 empty 數(shù)組 fill null 即可:
const length = 3;
const filledArray = Array(length).fill(null).map(() => {
return { value: 0 };
});
filledArray; // [{ value: 0 }, { value: 0 }, { value: 0 }]
關(guān)鍵字: JavaScript 初始值填充數(shù)組
文章連接: http://m.hsjyfc.com.cn/cjwt/822.html
版權(quán)聲明:文章由 晨展科技 整理收集,來(lái)源于互聯(lián)網(wǎng)或者用戶投稿,如有侵權(quán),請(qǐng)聯(lián)系我們,我們會(huì)立即刪除。如轉(zhuǎn)載請(qǐng)保留
晨展解決方案
晨展新聞