从JS中的数组排序和筛选

时间:2018-06-21 10:08:30

标签: javascript arrays sorting lodash

我有以下代码:

var names = ["John Chuck", "Micheal Novak", "john Owen", "Rick John"];
names = _.sortBy( names, function( name ){
        return name;
     }

它给了我一些名字的列表。现在,如果要进行文件填充,是否可以?

就像过滤“ John”一样,这样最终列表中只有3个名字带有“ John”。

5 个答案:

答案 0 :(得分:3)

尝试使用Array.prototype.filter()Array.prototype.includes()进行以下操作:

var names = ["John Chuck", "Micheal Novak", "john Owen", "Rick John"];
names = _.sortBy( names, function( name ){
        return name;
     }).filter(n => n.toLowerCase().includes('john'));
     
console.log(names)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.core.min.js"></script>

答案 1 :(得分:1)

您可以在javascript

中使用.includes

HTML

var words = ["John Chuck", "Micheal Novak", "John Owen", "Rick John"];

const result = words.filter(word => word.includes("John"));

console.log(result); //result is: Array ["John Chuck", "John Owen", "Rick John"]

注意: .includes区分大小写

答案 2 :(得分:0)

否,在您的特殊情况下,您不会给出第二个参数,因为您正在对字符串进行排序(除非您希望按整个字符串的一部分进行排序...)。

您需要先过滤,然后 sort

答案 3 :(得分:0)

由于您使用的是Lodash.js,因此您还可以查看_.reject函数

names = _.reject(names, function(name) {
              return name.match(/[.]*john[.]*/i) == undefined;
        });

这将仅返回3个名称。看看-JSFIDDLE DEMO

答案 4 :(得分:0)

一个简单的ES6替代方案(没有像Lodash这样的库):

var names = ["John Chuck", "Micheal Novak", "john Owen", "Rick John"];

var result = names.sort((a, b) => a.localeCompare(b)).filter(name => /john/gi.test(name));

console.log(result);