我有一个像这样的对象数组:
var myArray = [
{field: 'id', operator: 'eq', value: id},
{field: 'cStatus', operator: 'eq', value: cStatus},
{field: 'money', operator: 'eq', value: money}
];
Run Code Online (Sandbox Code Playgroud)
如何根据其属性删除特定的?
例如,如何使用'money'作为字段属性删除数组对象?
在javascript中我见过i++在许多情况下使用过,我知道它在前面的值中添加了一个:
for (var i=1; i<=10; i++) {
console.log(i);
}Run Code Online (Sandbox Code Playgroud)
但是当我这样做时会发生什么:
++i;
Run Code Online (Sandbox Code Playgroud)
使用--运算符是否有任何不同(当然除了加法而不是加法)?
在他的书" 更快的网站"中, Steve Sounders写道,提高循环性能的一种简单方法是将迭代器递减到0而不是递增到总长度(实际上这一章是由Nicholas C. Zakas编写的).根据每次迭代的复杂性,此更改可以比原始执行时间节省高达50%的成本.例如:
var values = [1,2,3,4,5];
var length = values.length;
for (var i=length; i--;) {
process(values[i]);
}
Run Code Online (Sandbox Code Playgroud)
这对于for循环,do-while循环和while循环几乎相同.
我想知道,这是什么原因?为什么要这么快地递减迭代器呢?(我对此技术背景感兴趣,而不是在证明此声明的基准测试中感兴趣.)
编辑:乍一看这里使用的循环语法看起来不对.没有length-1或者i>=0,让我们澄清(我很困惑太).
这是循环语法的一般:
for ([initial-expression]; [condition]; [final-expression])
statement
Run Code Online (Sandbox Code Playgroud)
初始表达 -var i=length
首先评估此变量声明.
条件 -i--
在每次循环迭代之前计算此表达式.它将在第一次通过循环之前递减变量.如果此表达式求值为false循环结束.在JavaScript中是0 == false这样的,如果i最终等于0它被解释为false并且循环结束.
最终表达
在每次循环迭代结束时(在下一次条件评估之前)评估该表达式.这里不需要它是空的.所有三个表达式在for循环中都是可选的.
for循环语法不是问题的一部分,但因为它有点不常见,我认为澄清它是有趣的.也许有一个原因是它更快,因为它使用较少的表达式(0 == false"技巧").
给定具有阵列.length 100包含具有值的元素0,以99在相应的索引,其中,所述要求是找到的阵列等于元件n:51.
为什么使用循环从数组的开始迭代到结束比从开始到结束和结束开始更快地迭代?
const arr = Array.from({length: 100}, (_, i) => i);
const n = 51;
const len = arr.length;
console.time("iterate from start");
for (let i = 0; i < len; i++) {
if (arr[i] === n) break;
}
console.timeEnd("iterate from start");Run Code Online (Sandbox Code Playgroud)
const arr = Array.from({length: 100}, (_, i) => i);
const n = 51;
const len = arr.length;
console.time("iterate from start and end");
for (let i = 0, k …Run Code Online (Sandbox Code Playgroud)我们中的许多人可能已经知道这个:
var list = ...
var index = list.length
while( index-- ) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
据说这是在javascript中进行循环的最快方法,因为你避免了额外的测试.到目前为止,在过去几年中,我在处理数据时使用了这种技术,其中速度很重要且顺序并不重要.
但是现在我偶然发现了一篇文章,说在处理数组时这实际上比较慢.
这使您避免额外的测试(与循环标准相比).但你知道吗?这比使用正确的订单慢得多.因为世界上所有的CPU缓存都希望处理"直接",所以你会一次又一次地出现缓存未命中,并且当你运气好时,你会得到2倍的缓慢.
因此,除非您有充分的理由这样做,否则不要向后循环.
来源:https://gamealchemist.wordpress.com/2013/05/01/lets-get-those-javascript-arrays-to-work-fast/
现在我很好奇!我只有有限的可能性来测试这些东西,而我发现的每个其他地方仍然说最后一个循环是最快的方式(甚至是stackoverflow上的多个答案).处理(可能很大)数组时,这是真的吗?
在过早优化答案弹出之前(就像它经常对这类问题一样):这主要是好奇心,是的,在游戏等方面,性能很重要!
关于jsperf:到目前为止,jsperf似乎暗示后向循环更快(我现在无法检查测试,因为它不会将结果加载到任何atm上 - 所以我回想起之前看到过的内容).这就是这个问题的根源:这两条信息本身就是矛盾的 - 至少如果那篇文章中所说的是真的!那到底什么是"正确的"呢?
javascript ×5
arrays ×3
performance ×3
loops ×2
iteration ×1
jquery ×1
object ×1
operators ×1
properties ×1
while-loop ×1