在下面的简单测试代码中我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);

答案 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