concat,但前置而不是追加
concat, but prepend instead of append
我遇到这种情况:
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 执行此操作的最佳方法是什么?我对任何可以节省一行代码的事情持开放态度:)
想到两个单行...
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'))
您可以创建一个函数,其中 return 是一个新的 Array()
,第一个变量传递设置在结果数组的索引 0
处,使用扩展元素将第二个参数传递的数组连接到单个数组,或者如果没有在第二个参数传递参数,return 一个 Array()
在第一个参数
传递元素
const prepend = (element, array = []) =>
!element ? [] : Array.of(element, ...array);
prepend("a", ["b", "c", "d"]) // `["a", "b", "c", "d"]`
prepend("a") // `["a"]`
prepend() // `[]`
我遇到这种情况:
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 执行此操作的最佳方法是什么?我对任何可以节省一行代码的事情持开放态度:)
想到两个单行...
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'))
您可以创建一个函数,其中 return 是一个新的 Array()
,第一个变量传递设置在结果数组的索引 0
处,使用扩展元素将第二个参数传递的数组连接到单个数组,或者如果没有在第二个参数传递参数,return 一个 Array()
在第一个参数
const prepend = (element, array = []) =>
!element ? [] : Array.of(element, ...array);
prepend("a", ["b", "c", "d"]) // `["a", "b", "c", "d"]`
prepend("a") // `["a"]`
prepend() // `[]`