JavaScript - 获取满足条件的数组元素

IT技术 javascript arrays conditional-statements
2021-03-04 08:42:16

我正在使用 W3C 学习 JavaScript,但我没有找到这个问题的答案。

我正在尝试对满足某些条件的数组元素进行一些操作。

除了在 for 循环中的数组元素上运行之外,还有其他方法吗?也许类似(在其他语言中):

foreach (object t in tArray)
   if (t follows some condition...) t++;

另一件事,有时我想使用元素的值,有时我想用它作为参考。语法上的区别是什么?

同样,我很乐意在更广泛的网站上提供建议以学习 JavaScript。谢谢

6个回答

在大多数浏览器(不是 IE <= 8)中,数组有一个filter方法,它不能完全满足您的要求,但会为您创建一个满足特定条件的原始数组元素的数组:

function isGreaterThanFive(x) {
     return x > 5;
}

[1, 10, 4, 6].filter(isGreaterThanFive); // Returns [10, 6]

Mozilla Developer Network有很多不错的 JavaScript 资源。

旁注:如果你想操作结果数组,你实际上是在循环两次。(替代:linq 延迟执行。)
2021-04-15 08:42:16
只是想补充一点,它已从版本 9 开始添加到 IE 中。
2021-05-03 08:42:16

在表达式主体中使用 ES6Array.filter()箭头函数

myArray.filter(x => x > 5)

比@Beauty 的回答简洁一点。

这是编写过滤器简短方法它从一个数字数组中返回所有大于 5 的值。

myArray.filter((x) => { return x > 5; })

用法示例:

var filterResult = [1, 10, 4, 6].filter((x) => { return x > 5; });
console.log(filterResult); // returns [ 10, 6 ]

这里是一个对象数组的过滤器,它检查属性条件。

myArray.filter((x) => { return x.myNumber > 5; })

用法示例:

var myArray = [{myNumber: 1, name: 'one'}, {myNumber: 3, name: 'tree'}, {myNumber: 6, name: 'six'}, {myNumber: 8, name: 'eight'}];
var result = myArray.filter((x) => { return x.myNumber > 5; });
console.log(result); // returns [ { myNumber: 6, name: 'six' }, { myNumber: 8, name: 'eight' } ]

您可以for ... in在 JavaScript 中使用:

for (var key in array) {
    if (/* some condition */) {
        // ...
    }
}

从 JavaScript 1.6 开始,您也可以使用它:

for each (var element in array) {
    // ...
}

这些主要用于遍历对象属性。您应该考虑简单地使用您的for-loop。

编辑:您可以使用像jQuery这样的 JavaScript 框架来消除这些跨浏览器问题。试一试。它的$.each()-method 可以完成这项工作。

确实,这些方法有效,但通常不推荐使用。原因是它还会枚举数组对象的其他属性(并且很多库都添加了此类属性),这会产生不可预测的结果。
2021-04-17 08:42:16
@sje397:没错。为此,我强烈推荐 jQuery。它的$.each()-method非常好用并且提供了闭包。由于 JavaScript 具有函数作用域,这在循环中执行大量操作时非常有用。
2021-04-28 08:42:16
枚举的实际属性集for...in是完全可以预测的,尽管它确实因浏览器而异。通常不可预测的是迭代顺序。对于迭代数组,for...in通常是一个坏主意。
2021-05-03 08:42:16
为了迭代数组而加载一个完整的库是非常无用的:p
2021-05-14 08:42:16
@Golmote:大多数 JavaScript 应用程序都可以从 jQuery 中受益。我想这不是这个项目中存在的唯一代码行。
2021-05-15 08:42:16

您可以使用Array.prototype.find,这正是您想要的,返回满足条件的第一个元素。例子:

> ([4, {a:7}, 7, {a:5, k:'r'}, 8]).find(o => o.a == 5)

{a:5, k:'r'}