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() // `[]`