如果两个数组之间的两个值相同,我一直试图创建一个不会返回任何值的函数。我已经在这里和谷歌上搜索了我的问题,我找到的所有内容都表明函数可以返回一个值,并且没有办法避免这样做。所以我直接询问是否有办法,如果不是,我怎么能绕过我想做的事情?
var bannedValues = [2, 4, 6, 8]; //Even numbers 1-8
var inputValues = [1, 2, 3, 4, 5, 6, 7, 8]; //All numbers 1-8
var filterValues = function(value)
{
for (var number of bannedValues)
{
if (value == number)
{
return; //I want this to return absolutely nothing, not even an empty value
}
}
return value;
}
var filteredValues = inputValues.map(filterValues);
console.log(filteredValues);
/* The array just gains "undefined" values in the places I want there
to be no value, so the array is a length of 8 instead of the 4 I want.
Can I somehow take those out or can I just not have them there in the first place? */

答案 0 :(得分:1)
如果您正在使用map,则实际上是在遍历数组并在必要时对其进行操作,但这不会从数组中删除项目。而不是地图尝试过滤器
var bannedValues = [2, 4, 6, 8]; //Even numbers 1-8
var inputValues = [1, 2, 3, 4, 5, 6, 7, 8]; //All numbers 1-8
var filterValues = function(value) {
return bannedValues.indexOf(value)===-1;
}
var filteredValues = inputValues.filter(filterValues);
console.log(filteredValues);
结果将是
(4) [1, 3, 5, 7]
答案 1 :(得分:1)
使用Array.filter()
方法:
var bannedValues = [2, 4, 6, 8]; //Even numbers 1-8
var inputValues = [1, 2, 3, 4, 5, 6, 7, 8]; //All numbers 1-8
filteredValues = inputValues.filter( function( el ) {
return bannedValues.indexOf( el ) < 0;
} );
/*This is another way to do it, but not supported in IE*/
filteredValues = inputValues.filter( function( el ) {
return !bannedValues.includes( el );
} );
console.log(filteredValues);
Lodash还有一个实用功能:see here
答案 2 :(得分:0)
JavaScript函数始终具有返回值。你无能为力。
我认为不可能告诉显式返回undefined
的函数和只返回没有值表达式的函数之间的区别。
如果您想要喜欢 .map()
,但可以选择跳过值,请改用.reduce()
:
var filterValues = function(accumulator, value)
{
for (var number of bannedValues)
{
if (value == number)
{
return accumulator;
}
}
accumulator.push(value);
return accumulator;
}
var filteredValues = inputValues.reduce(filterValues, []);