过滤大于或等于一个数字的数字(省略该数字),然后将其删除?

时间:2019-04-01 03:13:45

标签: javascript

这个问题听起来很奇怪,但是我使用这种阻断剂已经很长时间了。我试图遍历一个在字符串中具有一系列数字的数组(我正在模拟我的想法场景,这似乎也很奇怪),然后在循环中我想获取对象中数字的索引大于或等于75,以便以后消除不包含在内的元素。

输出应为:75100。但由于某种原因,输出为100。我究竟做错了什么?我什至会反向淘汰,因为如果在内部淘汰,我会遇到问题。

number="75";
aIndex=[];
aData=
[
  {
    "number":"75"
  },
  {
    "number":"50",
  },
  {
    "number":"100"
  }
];

for(var i in aData){
  let data=parseInt(aData[i].number);
  let number=parseInt("75");
  console.log(data);
  console.log(number);
  console.log(data <=number)
  if(data<=number){
    console.log(data , "<=", number)
    let index=aData.indexOf(aData[i]);
    aIndex.push(index);
    console.log("index",index);
  }
}

for(var n = aIndex.length -1; n >= 0 ; n--){
 aData.splice(aIndex[n], 1);
}    
console.log(aData);

https://jsfiddle.net/omeka4q3/

2 个答案:

答案 0 :(得分:1)

您当前正在测试是否data<=number,如果是,则测试索引pushaIndex,然后拼接出该索引。如果要保留个相等的数字,请改用<

number="75";
aIndex=[];
aData=
[
  {
    "number":"75"
  },
  {
    "number":"50",
  },
  {
    "number":"100"
  }
];

for(var i in aData){
  let data=parseInt(aData[i].number);
  let number=parseInt("75");
  console.log(data);
  console.log(number);
  console.log(data <number)
  if(data<=number){
    console.log(data , "<=", number)
    let index=aData.indexOf(aData[i]);
    aIndex.push(index);
    console.log("index",index);
  }
}

for(var n = aIndex.length -1; n >= 0 ; n--){
 aData.splice(aIndex[n], 1);
}    
console.log(aData);

或者,您可以使用filter代替手动splice进行编码,这可能很乏味且容易出错:

const aData = [{
    "number": "75"
  },
  {
    "number": "50",
  },
  {
    "number": "100"
  }
];
const aDataFiltered = aData.filter(({ number }) => Number(number) >= 75);
console.log(aDataFiltered);

答案 1 :(得分:0)

您可以使用Array.reduce()获得所需的结果:

let aData = [
  {number: "75"},
  {number: "50"},
  {number: "100"}
];

let filtered = aData.reduce((acc, {number}) => {
  number = Number(number);
  if(number >= 75){
    acc.push(number);
  }
  return acc;
}, []);

console.log(filtered);