Javascript concat,但使用prepend而不是append

Javascript concat,但使用prepend而不是append,javascript,node.js,concat,Javascript,Node.js,Concat,我有这样的情况: 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',

我有这样的情况:

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))

后者使用的是

更新 不,没有
数组#precat()
,这是有充分理由的,因为这被证明是非常琐碎的

TC39/proposal array precat
(我在开玩笑!(可能…(这是一个玩笑)))
Object.defineProperty(Array.prototype,'precat'{
对,,
可写:对,
值:函数precat(){
返回Array.prototype.concat.call([],…参数,this)
}
})

console.log(['e','f','g'].precat('a',['b','c','d'))
您可以创建一个函数,该函数返回一个新的
数组()
,第一个传递的变量设置在结果数组的索引
0
处,使用扩展元素将在第二个参数处传递的数组连接到单个数组,或者如果在第二个参数处未传递任何参数,返回在第一个参数处传递元素的
数组()

const prepend = (element, array = []) => 
                  !element ? [] : Array.of(element, ...array);

prepend("a", ["b", "c", "d"]) // `["a", "b", "c", "d"]`

prepend("a") // `["a"]`

prepend() // `[]`

您问题的答案是否未包含在问题本身的
args.unshift(foo)中
fn.apply(ctx,[foo].concat(args))
fn.call(ctx,foo,.args)
@PatrickRoberts当然,这些都很好,请添加一个答案。好的,第一个注释建议
。unshift()
,所以…@AntonioVal spread不是一个操作符,对吧,但我特别想知道precat功能是否存在,有时候这些东西确实存在,只是很难找到它们。哈,老兄,从你写的东西来看,concat也是微不足道的,那么为什么concat会存在呢?抱歉,这没有意义:)precat应该存在,它只是不存在。@AlexanderMills“是的,但我特别想知道precat功能是否存在”是的,
.unshift()
,正如在OP中演示的那样“,并且有充分的理由证明这是非常微不足道的”-如果这是在语言中包含内容的门槛,我想其他一些方法也可以省略。@AlexanderMills这是你的prollyfill,如果你真的想要的话。我相信你知道怎么做。错误:将一个正整数前置到一个空数组。使用为这种情况创建的
Array.of()
@PatrickRoberts Yes,考虑
Array.of()
。此外,如果未传递任何参数,则不应返回
[undefined]
,而是
[]
,请参阅更新后的帖子:为什么要使用
Array()
而不是
[]
?@nnnn进行说明<代码>[]
调用
Array()
;它们是同义词,是吗?@PatrickRoberts需要使用扩展元素
.concat()
将第二个参数和第一个参数合并到同一个数组
前置(“a”,“c”,“d”])//[“a”,数组(2)]
const prepend = (element, array = []) => 
                  !element ? [] : Array.of(element, ...array);

prepend("a", ["b", "c", "d"]) // `["a", "b", "c", "d"]`

prepend("a") // `["a"]`

prepend() // `[]`