使用 Underscore.js 提取包含特定字符串的特定对象

Extract specific object contain specific string using Underscore.js

我有这个字段,我用的是下划线js

我正在尝试访问包含 .tgz

_id 字段
<html> 
    <head> 
        <title>_.contains() function</title> 
        <script type="text/javascript" src= 
        "https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js" > 
        </script> 
        <script type="text/javascript" src= 
        "https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore.js"> 
        </script> 
    </head>        
    <body> 
        <script type="text/javascript"> 
            var people = [ 
                {"id_": "sakshi.tgz"}, 
                {"id_": "aishwarya.zip"}, 
                {"id_": "ajay.tgz"}, 
                {"id_": "akansha.yml"}, 
                {"id_": "preeti.json"} 
            ] 
         console.log(_.where(people, {id_: "sakshi.tgz"})); 
        </script> 
    </body>  
</html> 

我只知道如何进行精确匹配。

console.log(_.where(people, {id_: "sakshi.tgz"})); 

预期结果

如您所见,我正在尝试获取其中 2 个以 .tgz 结尾的。

对我有什么提示吗?

Fiddle : https://codepen.io/sn4ke3ye/pen/KKzzzLj?editors=1002

如果您有一个字符串,并且您想知道它的最后四个字符是否等于 '.tgz',这是一种可行的方法 (MDN: slice):

aString.slice(-4) === '.tgz' // true or false

如果该字符串是某个对象的 id_ 属性,只需先引用 id_ 属性,然后在其上调用 slice

someObject.id_.slice(-4) === '.tgz' // true or false

这是我们想要对集合中的每个对象执行的操作,所以这是我们的 iteratee。为了重复应用,我们把它包装成一个函数:

function idEndsWithTgz(obj) {
    return obj.id_.slice(-4) === '.tgz';
}

现在我们可以使用这个迭代器 _.filter:

console.log(_.filter(people, idEndsWithTgz));

关于Underscore更全面的介绍,也可以参考我最近的另一个回答:

let newArr = people.filter(obj => obj._id.substr(obj._id.length -4) === ".tgz");

我使用filtersubstrJavaScriptbuilt-in方法对以.tgz结尾的_id进行排序。