[英]Get elements from array untill a condition matches
I have an array like this 我有这样的数组
var arr = [
"/a_3312368_392921_800MHz",
"/a_3312368_392853_900MHz",
"/a_3312368_578261_1GHz",
"/a_3312368_578189_120GHz",
"/a_3312368_578167_140GHz",
"/a_3312368_578230_160GHz",
"/a_3312368_578192_180GHz",
"/a_3312368_397393_183GHz",
"/a_3312368_582870_186GHz",
"/a_3312368_578174_190GHz",
"/a_3312368_578177_2GHz",
"/a_3312368_578922_210GHz",
"/a_3312368_578479_220GHz",
"/a_3312368_578357_226GHz",
"/a_3312368_578182_240GHz",
"/a_3312368_578919_250GHz",
"/a_3312368_578349_253GHz",
"/a_3312368_578639_280GHz",
"/a_3312368_579178_3GHz"
];
I need to get value on an operator selection. 我需要从操作员选择中获得价值。 I have some operators like this
我有一些这样的运营商
`> , < , = , <= , >=`
And here is the selected value for example 这是例如选择的值
var selection = "/a_3312368_578189_120GHz";
My current operator for instance 例如我目前的运营商
var operator = ">";
This is some code i have written. 这是我写的一些代码。
var string_array = [];
for(var i = 0; i < arr.length; i++){
if(selection == arr[i]){
break;
}
string_array.push(arr[i]);
}
console.log(string_array);
It is giving me proper results. 它给了我适当的结果。 But when i am trying it with map it produces error
Can't have break outside of loop
. 但是当我用map尝试它时会产生错误
Can't have break outside of loop
。
string_array = arr.map(function(item) { if (selection == item){ break; } else {return item;} });
How can i write a one line code for this. 我如何为此编写一行代码。
Well… you can't break map. 好吧...你不能破坏地图。 Don't use
map
. 不要使用
map
。 Use some or every . 使用一些或每一个 。
Example - some: - some
will break when the callback returns true
示例-一些: -
some
在回调返回true
时会中断
arr.some(function (item) {if (selection == item) {return true;}});
var selection = "/a_3312368_578189_120GHz"; var arr = ["/a_3312368_392921_800MHz", "/a_3312368_392853_900MHz", "/a_3312368_578261_1GHz", "/a_3312368_578189_120GHz", "/a_3312368_578167_140GHz", "/a_3312368_578230_160GHz", "/a_3312368_578192_180GHz", "/a_3312368_397393_183GHz", "/a_3312368_582870_186GHz", "/a_3312368_578174_190GHz", "/a_3312368_578177_2GHz", "/a_3312368_578922_210GHz", "/a_3312368_578479_220GHz", "/a_3312368_578357_226GHz", "/a_3312368_578182_240GHz", "/a_3312368_578919_250GHz", "/a_3312368_578349_253GHz", "/a_3312368_578639_280GHz", "/a_3312368_579178_3GHz" ]; string_array = []; arr.some(function(item) { if (selection == item){ return true; }else{string_array.push(item);} }); console.log(string_array);
Example-every: - every
will break when the callback returns false
每个示例: -当回调返回
false
时, every
示例都会中断
arr.every(function(item) { if (selection == item) {return false;}});
var selection = "/a_3312368_578189_120GHz"; var arr = ["/a_3312368_392921_800MHz", "/a_3312368_392853_900MHz", "/a_3312368_578261_1GHz", "/a_3312368_578189_120GHz", "/a_3312368_578167_140GHz", "/a_3312368_578230_160GHz", "/a_3312368_578192_180GHz", "/a_3312368_397393_183GHz", "/a_3312368_582870_186GHz", "/a_3312368_578174_190GHz", "/a_3312368_578177_2GHz", "/a_3312368_578922_210GHz", "/a_3312368_578479_220GHz", "/a_3312368_578357_226GHz", "/a_3312368_578182_240GHz", "/a_3312368_578919_250GHz", "/a_3312368_578349_253GHz", "/a_3312368_578639_280GHz", "/a_3312368_579178_3GHz" ]; string_array = []; arr.every(function(item) {if (selection != item){string_array.push(item);} return item.indexOf(selection) == -1; }); console.log(string_array);
When you use map
result array have same element count as source. 当您使用
map
结果数组时,其元素数与源数相同。
What you want is just filter array, so use filter
function. 您想要的只是过滤器数组,因此请使用
filter
功能。
Also if your source array sorter, so operator just show relation with index of selected element. 另外,如果您的源数组排序器,则运算符仅显示与所选元素的索引的关系。
So your code should be like this 所以你的代码应该像这样
var selection = "/a_3312368_578189_120GHz";
var indexSelected = arr.indexOf(selection)
string_array = arr.filter(function(el, index){
return index < indexSelected;
});
var arr = [ "/a_3312368_392921_800MHz", "/a_3312368_392853_900MHz", "/a_3312368_578261_1GHz", "/a_3312368_578189_120GHz", "/a_3312368_578167_140GHz", "/a_3312368_578230_160GHz", "/a_3312368_578192_180GHz", "/a_3312368_397393_183GHz", "/a_3312368_582870_186GHz", "/a_3312368_578174_190GHz", "/a_3312368_578177_2GHz", "/a_3312368_578922_210GHz", "/a_3312368_578479_220GHz", "/a_3312368_578357_226GHz", "/a_3312368_578182_240GHz", "/a_3312368_578919_250GHz", "/a_3312368_578349_253GHz", "/a_3312368_578639_280GHz", "/a_3312368_579178_3GHz" ]; var selection = "/a_3312368_578189_120GHz"; var indexSelected = arr.indexOf(selection); var string_array = arr.filter(function(el,index){ return index < indexSelected; }); document.getElementById('r').innerHTML = JSON.stringify(string_array,null, 2);
<pre id="r"></pre>
As say @Toffy in comment - in your case, seems, you need simple slice
就像在评论中说@Toffy-在您的情况下,您似乎需要简单的
slice
var indexSelected = arr.indexOf(selection)
string_array = arr.slice(0,indexSelected);
var arr = [ "/a_3312368_392921_800MHz", "/a_3312368_392853_900MHz", "/a_3312368_578261_1GHz", "/a_3312368_578189_120GHz", "/a_3312368_578167_140GHz", "/a_3312368_578230_160GHz", "/a_3312368_578192_180GHz", "/a_3312368_397393_183GHz", "/a_3312368_582870_186GHz", "/a_3312368_578174_190GHz", "/a_3312368_578177_2GHz", "/a_3312368_578922_210GHz", "/a_3312368_578479_220GHz", "/a_3312368_578357_226GHz", "/a_3312368_578182_240GHz", "/a_3312368_578919_250GHz", "/a_3312368_578349_253GHz", "/a_3312368_578639_280GHz", "/a_3312368_579178_3GHz" ]; var selection = "/a_3312368_578189_120GHz"; var indexSelected = arr.indexOf(selection); var string_array = arr.slice(0,indexSelected); document.getElementById('r').innerHTML = JSON.stringify(string_array,null, 2);
<pre id="r"></pre>
Sample if source array not sorted 如果源数组未排序,则进行采样
var selection = "/a_3312368_578189_120GHz";
var selectedFreq = getFreq(selection);
function getFreq(s) {
var parts = s.match(/(\d+)(MHz|GHz)$/);
return parts[1]* (parts[2] == "GHz" ? 1000: 1);
}
var string_array = arr.filter(function(el) {
var elFreq = getFreq(el);
return selectedFreq > elFreq;
});
var arr = [ "/a_3312368_392921_800MHz", "/a_3312368_392853_900MHz", "/a_3312368_578261_1GHz", "/a_3312368_578922_210GHz", "/a_3312368_578479_220GHz", "/a_3312368_578357_226GHz", "/a_3312368_578182_240GHz", "/a_3312368_578919_250GHz", "/a_3312368_578349_253GHz", "/a_3312368_578639_280GHz", "/a_3312368_579178_3GHz", "/a_3312368_578189_120GHz", "/a_3312368_578167_140GHz", "/a_3312368_578230_160GHz", "/a_3312368_578192_180GHz", "/a_3312368_397393_183GHz", "/a_3312368_582870_186GHz", "/a_3312368_578174_190GHz", "/a_3312368_578177_2GHz", ]; var selection = "/a_3312368_578189_120GHz"; var selectedFreq = getFreq(selection); function getFreq(s) { var parts = s.match(/(\\d+)(MHz|GHz)$/); return parts[1]* (parts[2] == "GHz" ? 1000: 1); } var string_array = arr.filter(function(el) { var elFreq = getFreq(el); return selectedFreq > elFreq; }); document.getElementById('r').innerHTML = JSON.stringify(string_array, null, 2);
<pre id="r"></pre>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.