Javascript 从数组中删除无效键,并使用最大值进行排序和限制

Javascript 从数组中删除无效键,并使用最大值进行排序和限制,javascript,underscore.js,Javascript,Underscore.js,如何从数组中删除这样的条目 _id=0 _id= _id=未定义 _id=null 然后对输出进行排序,并将其限制在7个成本最高的项目上 MyArray 期望输出 这样做不需要下划线,只需使用纯javascript即可,而且这样做效率更高,因为本机方法更快。方法是过滤掉错误的值,然后按成本排序,最后将前7名结果进行切片: 注意排序函数使用- 使用普通JS 运行示例: var myArray=[ {u id:,M:4,S:2,Costs:6}, {u id:0,M:1,S:0,Costs:1},

如何从数组中删除这样的条目

_id=0 _id= _id=未定义 _id=null 然后对输出进行排序,并将其限制在7个成本最高的项目上

MyArray

期望输出


这样做不需要下划线,只需使用纯javascript即可,而且这样做效率更高,因为本机方法更快。方法是过滤掉错误的值,然后按成本排序,最后将前7名结果进行切片:

注意排序函数使用-

使用普通JS 运行示例:

var myArray=[ {u id:,M:4,S:2,Costs:6}, {u id:0,M:1,S:0,Costs:1}, {u id:1,M:1,S:0,Costs:1}, {u id:2,M:1,S:0,Costs:1}, {u id:3,M:0,S:3,Costs:3}, {u id:4,M:1,S:0,Costs:1}, {u id:5,M:1,S:0,Costs:5}, {{id:6,M:1,S:0,成本:2}, {{id:7,M:1,S:0,成本:5}, {u id:8,M:1,S:0,Costs:1}, {id:9,M:1,S:0,成本:10} ]; var top7=myArray.filterfunctionitem{ return!!item;//过滤掉所有假值 }.sortfunctiona,b{ 返回parseIntb.Costs-parseInta.Costs;//按成本降序排序 }.0,7; console.logtop7 你可以按如下方式将它们链接起来

var result = arr.filter(function(doc){
    return !!parseInt(doc._id);
}).sort(function(a,b){
    return (parseInt(b.Costs) - parseInt(a.Costs));
}).slice(0,7);

另一个答案使用下划线,用于删除具有无效id的项,对项进行排序并限制结果集中的数量:

var invalidId = function(item){
    return item._id == "0" || item._id == "" || item._id == undefined || item._id == null;
}

var negateCosts = function(item){
    return -parseInt(item.Costs, 10)
}

var result = _.chain(data)
    .reject(invalidId)
    .sortBy(negateCosts)
    .first(7)
    .value()

谢谢!!如果_id碰巧是char呢?不客气。js中没有char,所有文本都是字符串,因此长度为1的字符串仍然可以使用。此外,此代码中未使用\u id字段,因此对其执行任何操作(包括删除)都不会产生任何影响。该死的,看起来它就像一个符咒!然而,我认为我已经在javascript链的某个点上编写了未定义的as_id值。你能帮我过滤一下带有_id=undefined的数组元素吗?好吧,你可以给过滤方法添加一个额外的条件:return!!项目和项目。\u id!==未定义;。这将过滤掉数组中的所有假值以及_id为UnfinedHanks的所有元素!!我得到了我想要的!非常感谢!!对我来说是件大事@nemsort无法工作,因为[]。默认情况下,sort按字母顺序对元素进行排序。正确的方法是使用一个-而不是一个简单的建议,即不需要所有的| |,因为他的无效ID在JS中都是假的值,非常简单!这个项目应该有效。另外,我认为0是一个有效的id,尽管他没有指定是指0还是0。好的替代方案。
var top7 = myArray.filter(function(item) {
  return !!item; // filters out all falsey values
}).sort(function(a, b) {
  return parseInt(b.Costs) - parseInt(a.Costs); // sort descending by Costs
}).slice(0, 7); // extracts the top 7 results
var result = arr.filter(function(doc){
    return !!parseInt(doc._id);
}).sort(function(a,b){
    return (parseInt(b.Costs) - parseInt(a.Costs));
}).slice(0,7);
var invalidId = function(item){
    return item._id == "0" || item._id == "" || item._id == undefined || item._id == null;
}

var negateCosts = function(item){
    return -parseInt(item.Costs, 10)
}

var result = _.chain(data)
    .reject(invalidId)
    .sortBy(negateCosts)
    .first(7)
    .value()