我正在尋找一種方法來創建物件陣列,該陣列具有固定的3個大小,并將默認值填入其中,但當我向陣列推送時,它應該替換默認值。
例子:
宣告一個陣列,用 "默認值 "字串填充該陣列
。
["默認值", "默認值", "默認值"]
我現在向這個初始陣列推送一些文本,并期望得到如下結果:
["添加資料", "默認值", "默認值"]
我向這個陣列推送更多的資料,期望得到以下結果:
["添加資料", "添加資料", "默認值"]
我再次向這個陣列推送更多的資料,期望得到以下結果:
["添加資料", "添加資料", "添加資料"]
因此,最終的結果應該是,如果推送一個資料,那么陣列的其余部分應該保持默認值,除非我把三個資料都推送到陣列中。
注意:這個例子是一個字串陣列,只是為了顯示一個例子,但我正在尋找的解決方案是物件陣列。 Array.fill()方法對于像字串、數字和布爾這樣的不可改變的值非常有效。如果是帶物件的陣列,陣列中的每個槽都指的是同一個物件,這不是我想要的。我希望每個物件都是唯一的
。uj5u.com熱心網友回復:
你可以擴展Array類,使其具有你所描述的行為......
。class FixedArray extends Array {
/**。
* 構造一個固定長度的陣列
* @param int length - 陣列的長度
* @param mixed default_value - 空槽的默認值
*/
constructor(length, default_value) {
super(length)。
this.default_value = default_value;
super.fill(default_value)。
}
/**。
* "推送 "專案到陣列的起始位置(取消移位)。
* @params ...args mixed - values to put in the array.
*/
push(...args) {
args.forEach(arg => {
super.pop()。
super.unshift(arg)。
});
}
/**。
* 從陣列的末端彈出一個專案
* 并用默認值替換它
*/
pop(){
super.pop()。
super.push(this.default_value)。
}
/**。
*將一個專案從陣列的開始位置移開
* 并用默認值替換它
*/
shift(){
super.shift()。
super.unshift(this.default_value)。
}
}
var arr = new FixedArray(4, 'default value') 。
console.log(arr)。
arr.push('new value')。
console.log(arr)。
arr.push('new value')。
console.log(arr)。
arr.pop()。
console.log(arr);
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
為了解決關于陣列填充方法的問題,你可以添加一個方法來復制你放在里面的任何值......
/**。
* 用所提供的任何引數的副本來填充陣列。
*按值填充,而不是按參考填充。
*/
fill(...args) {
args.forEach(arg=>;{
let copy = JSON.parse(JSON.stringify(arg))。
this.push(arg)。
});
}
uj5u.com熱心網友回復:
用默認的唯一物件值來創建和填充陣列:
const tuple = new Array(3)。 fill(0).map(() => ({ foo: "bar" }))
//or
const defaultObject = { foo: "bar" }
const tuple = new Array(3)。 fill(0).map(() => ({ ... defaultObject })
添加新項,并保持陣列大小不變
function addTo(tuple, newItem) {
tuple.unshift(newItem) //將新專案添加到開頭。
tuple.pop() ///移除末端的舊項。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/307923.html
標籤:
上一篇:JavaSwing的布局相當于C#WPF的布局,是什么?
下一篇:如何搜索一個LPWSTR的子串?
