有没有办法将多个Array方法应用于一行中的数组?

时间:2018-06-06 19:37:46

标签: javascript arrays

在下面的简单测试代码中我srishti@ubuntu:~/realtimeKCF/build$ cmake .. FINALLL TBB_LIBRARIES = 'optimized;/usr/lib/x86_64-linux-gnu/libtbb.so;debug;TBB_tbb_LIBRARY_DEBUG-NOTFOUND' CMake Error: The following variables are used in this project, but they are set to NOTFOUND. Please set them or make sure they are set and tested correctly in the CMake files: TBB_tbb_LIBRARY_DEBUG (ADVANCED) linked by target "DSKCFcpp" in directory /home/srishti/realtimeKCF -- Configuring incomplete, errors occurred! See also "/home/srishti/realtimeKCF/build/CMakeFiles/CMakeOutput.log". 将数字10加入数组,然后push' hello world'进入第二个索引的数组。它按预期工作。



splice




但是可以在一条线上执行此操作吗?我尝试在下面的示例链接,它会抛出一个错误。我无法在网上找到任何人谈论此事。



"use strict";

let myArray = [1, 2, 3, 4, 5];

myArray.push(10);
myArray.splice(2, 0, 'hello world');

console.log(myArray);




7 个答案:

答案 0 :(得分:9)

是的,可以在一行中完成。

"use strict";

let myArray = [1, 2, 3, 4, 5];

myArray.push(10); myArray.splice(2, 0, 'hello world');

console.log(myArray);

但是你为什么要在一行中做到这一点?如果您的担忧是可读性,我会坚持两行。如果您希望它更具功能性,那么请使用功能库

修改

我同意其他人对可连接性所说的话。我只是想提出另一个观点

答案 1 :(得分:3)

这些内置方法并非设计为流畅界面的一部分,因为它们不会返回他们正在操作的数组(push()返回新的长度{{ 1}}返回已删除的子数组)。您可以添加自己类似但流畅的方法。



splice()




答案 2 :(得分:2)

如果您使用的是现代JavaScript浏览器,ItemTemplate部分使用array spread syntax会更容易一些。由于其他人都在使用链接(这需要更改我不喜欢的内置Array对象),我会使用不同的东西:

push

答案 3 :(得分:2)

您可以在数组中获取方法和参数,并使用函数进行迭代,该函数将数组作为this值。

"use strict";

function arrayFn([k, ...a]) { this[k](...a); }

let myArray = [1, 2, 3, 4, 5];

[
    ['push', 10],
    ['splice', 2, 0, 'hello world']
].forEach(arrayFn, myArray);

console.log(myArray);

答案 4 :(得分:1)

没有

  

push()方法...返回数组的新长度。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push

链接仅在函数返回执行该函数的同一对象时才可用。由于.push()方法返回一个数字,因此您尝试执行number.splice(),这不是javascript编号对象的方法。

这也是jQuery函数 能够链接的原因。

评论此答案的任何部分是否令人困惑。

答案 5 :(得分:1)

链接通过调用前一个方法调用的返回值的方法来工作。例如:

myArray.filter(...).map(...).join(', ').trim()

// is equivalent to

const filteredArray = filtered.map(...)    
const mappedArray = filteredArray.map(...) // filteredArray is an array, we can use map.
const aString = mappedArray.join(', ')     // mappedArray is an array, we can use join
const trimmedString = aString.trim()       // aString is a string, we can use trim

但是在你的情况下,它不起作用,因为push返回一个数字(数组的长度加上新的项目)。数字没有splice方法。

myArray.push(...).splice(...)

// is equivalent to doing

const result1 = myArray.push(...)
const result2 = result1.splice(...) // But result1 isn't an array.

答案 6 :(得分:0)

只有当您想要链接的方法全部返回一个数组时,push才能返回数组的长度:



console.log([1,2].push(3)) // 3, not an array

console.log([1,2].map(x => x+1)) // [2,3], an array