我有这个javascript:
function padded_array(k, value){
var a = [];
a[k] = value;
return a;
}
padded_array(3, "hello"); //=> [undefined, undefined, undefined, 'hello']
是否可以缩短函数体中的代码?
答案 0 :(得分:15)
对于所有来到这里的谷歌 - 你可能正在寻找这个:
var pad_array = function(arr,len,fill) {
return arr.concat(Array(len).fill(fill)).slice(0,len);
}
答案 1 :(得分:4)
如果要排除'hello',可以使用
new Array(count);
创建填充数组。
编辑:也许是这样的?
new Array(5).concat("hello")
答案 2 :(得分:1)
不在标准ES5或前身中。当然你可以在jQuery中做$.extend([], {"3": "hello"})
之类的事情;你甚至可以做到
Object.create(Array.prototype, {"3": {value: "hello"} });
在裸ES5中,但它是黑客,我不会认为这是一个解决方案(如果你没关系,你可以采用它)。
答案 3 :(得分:1)
您可以使用它,如果您的JS不支持Array.prototype.fill()
(例如Google Apps脚本),并且您无法使用第一个答案中的代码:
function array_pad(array, length, filler)
{
while(true)
if(array.push(filler) >= length)
break;
return array;
}
答案 4 :(得分:1)
使用传播算子的另一种解决方案:
padArray = (length, value) => [...Array(length).fill(), value];
用法与您提到的相同:
padded_array(3, "hello"); //=> [undefined, undefined, undefined, 'hello']
答案 5 :(得分:1)
假设这是您的数组
const yourArray = [1,2]
如果您只想循环4
次(可能是react jsx)
Array.from({length:4}) //[undefined,undefined,undefined,undefined]
如果您要循环yourArray
4次,但要从已有的值开始
// unmutation option
Array.from({...yourArray, length:4}) //[1,2,undefined,undefined]
// Or, mutation the original array.
yourArray.length = 4;
Array.from(yourArray) //[1,2,undefined,undefined]
如果您确实要填写它。例如与“索引”。
重新映射
// unmutation option
// [1,'2',3, 4]
Array.from({...yourArray,length:4}, (v,i) => v ?? i+1 )
// Or, mutation the original array. and fill with "x"
array.yourArray.length = 4;
// [1,'2','x','x']
Array.from(yourArray, (v) => v ?? 'x')
答案 6 :(得分:0)
我知道这是一个古老的问题,但是如果有人在这里绊倒(就像我最初所做的那样),我想加2美分。
无论如何,这是我对Array.from的看法
const padded_array = (k, value) => Array.from({ length: k }).concat(value)
console.log(padded_array(3, "hello"));
您也可以使用以下方法:
const padded = (arr, pad, val) => {
arr[pad] = val
return arr
}
console.log(padded([],3,'hello'))
答案 7 :(得分:0)
对于开始时的填充:
function padArrayStart(arr, len, padding){
return Array(len - arr.length).fill(padding).concat(arr);
}
演示:
function padArrayStart(arr, len, padding){
return Array(len - arr.length).fill(padding).concat(arr);
}
console.log(...padArrayStart([1,2,3], 5, 0));//0 0 1 2 3
console.log(...padArrayStart([4,5,6], 3, 0));//4 5 6
对于末尾的填充:
function padArrayEnd(arr, len, padding){
return arr.concat(Array(len - arr.length).fill(padding));
}
演示:
function padArrayEnd(arr, len, padding){
return arr.concat(Array(len - arr.length).fill(padding));
}
console.log(...padArrayEnd(['a','b','c'], 10, 'z'));//a b c z z z z z z z
console.log(...padArrayEnd([0, 'a', 'd'], 6, -1));//0 a d -1 -1 -1
答案 8 :(得分:0)
// push is faster than concat
// mutate array in place + return array
const pad_right = (a, l, f) =>
!Array.from({length: l - a.length})
.map(_ => a.push(f)) || a;
const a = [1, 2];
pad_right(a, 4, 'x');
// -> [ 1, 2, 'x', 'x' ]
a;
// -> [ 1, 2, 'x', 'x' ]