我遇到这种情况:
const args = ['b','c','d'];
var foo = 'a';
args.unshift(foo);
fn.apply(ctx, args); // args => ['a','b','c','d'] ✅
我可以使用concat,但这会将foo放在列表的末尾:
const args = ['b','c','d'];
var foo = 'a';
fn.apply(ctx, args.concat(foo)); // args => ['b','c','d','a'] ❌
我正在寻找" precat",这样我就可以在前面创建一个带有新元素的新数组,用JS做这个的最好方法是什么?我愿意为我节省一些代码:)
答案 0 :(得分:1)
想到两个单线......
fn.apply(ctx, [foo].concat(args))
fn.call(ctx, foo, ...args)
后者使用ES2015 spread syntax。
不,没有Array#precat()
,并且有充分的理由,因为这被证明是非常微不足道的。
TC39/proposal-array-precat
(我在开玩笑!(也许......(它 意味着一个笑话)))
Object.defineProperty(Array.prototype, 'precat', {
configurable: true,
writable: true,
value: function precat() {
return Array.prototype.concat.call([], ...arguments, this)
}
})
console.log(['e', 'f', 'g'].precat('a', ['b', 'c'], 'd'))
答案 1 :(得分:1)
您可以创建一个函数,该函数返回一个新的Array()
,其中第一个变量在结果数组的索引0
处传递,使用spread元素将第二个参数传递的数组连接到单个数组,或者如果不是参数在第二个参数传递,返回Array()
,其元素在第一个参数
const prepend = (element, array = []) =>
!element ? [] : Array.of(element, ...array);
prepend("a", ["b", "c", "d"]) // `["a", "b", "c", "d"]`
prepend("a") // `["a"]`
prepend() // `[]`