这个问题听起来很奇怪,但是我使用这种阻断剂已经很长时间了。我试图遍历一个在字符串中具有一系列数字的数组(我正在模拟我的想法场景,这似乎也很奇怪),然后在循环中我想获取对象中数字的索引大于或等于75,以便以后消除不包含在内的元素。
输出应为:75
和100
。但由于某种原因,输出为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);
答案 0 :(得分:1)
您当前正在测试是否data<=number
,如果是,则测试索引push
到aIndex
,然后拼接出该索引。如果要保留个相等的数字,请改用<
。
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);