这里我有一个函数。它接受一个对象数组和一个特定的值。使用forEach方法迭代数组,以确保提供的值已经存在于数组中的任何对象中。如果发现它返回FALSE ,或者它应该返回true。但是虽然它返回FALSE,但是其余的代码执行会导致一直返回TRUE。如何只能返回FALSE / TRUE
if(find_value_in_obj(all_selected,current.value)){
all_selected.push({select_elem:current,value:current.value});
console.log(all_selected);
}else{
alert("you already selected the value");
}
function find_value_in_obj(arr_obj,value){
arr_obj.forEach(function(elem,index,array){
if(elem.value == value){
console.log('found it ');
return false;
}
});
console.log("i am her"); // though value already exists and should returned ,it gets executed results in returning TRUE instead
return true;
}
答案 0 :(得分:2)
var savePicker = new Windows.Storage.Pickers.FileSavePicker();
savePicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary;
savePicker.FileTypeChoices.Add("CSV", new List<string>() { ".csv" });
savePicker.SuggestedFileName = fileName;
StorageFile newFile = await savePicker.PickSaveFileAsync();
不能像常规forEach
循环那样在迭代中间被破坏。请改用常规for
循环。或者,如果您使用的是ES6,那么您可以使用.find()
来实现相同的目标。
for
正如felix建议的那样,你也可以使用Array.prototype.some
。
function find_value_in_obj(arr_obj,value){
return !!!arr_obj.find(itm => itm == value);
}
答案 1 :(得分:2)
由于使用some
只是一个单行,你实际上并不需要为它创建一个帮助器,例如(来自MDN):
console.log([2, 5, 8, 1, 4].some(elem => elem > 10)); // false
console.log([12, 5, 8, 1, 4].some(elem => elem > 10)); // true
&#13;
答案 2 :(得分:1)
您也可以尝试使用过滤器,这更合适也更干净。
if(find_value_in_obj(all_selected,current.value)){
all_selected.push({select_elem:current,value:current.value});
console.log(all_selected);
}else{
alert("you already selected the value");
}
function find_value_in_obj(arr_obj,value){
var resultArray = arr_obj.filter(function(elem,index,array){
return elem.value == value;
});
if(resultArray.length > 0){
return false;
}
console.log("i am her"); // though value already exists and should returned ,it gets executed results in returning TRUE instead
return true;
}