Javascript 如果未定义或为空或indexOf匹配,则
我有一个javascript函数,其中可以传递一个选项。该选项用于指定限制,因此,如果该选项未定义、为null或为空数组,则不应用任何限制,并测试所有数据行。如果提供了一个选项数组,那么只有与其中一个限制匹配的数据行才会被删除 也就是说,函数需要测试数据数组的每个元素,然后如果提供了限制选项,还可以选择检查限制选项 编写测试的方法是否更短?Javascript 如果未定义或为空或indexOf匹配,则,javascript,Javascript,我有一个javascript函数,其中可以传递一个选项。该选项用于指定限制,因此,如果该选项未定义、为null或为空数组,则不应用任何限制,并测试所有数据行。如果提供了一个选项数组,那么只有与其中一个限制匹配的数据行才会被删除 也就是说,函数需要测试数据数组的每个元素,然后如果提供了限制选项,还可以选择检查限制选项 编写测试的方法是否更短? function dostuff (data, option) { for (var i = 0; i < data.length; i++) {
function dostuff (data, option) {
for (var i = 0; i < data.length; i++) {
if ((test(data[i].x) && !option) ||
(test(data[i].x) && !option.length) ||
(test(data[i].x) && Array.isArray(option) && option.length && option.indexOf(data[i].y) != -1)
) // ZOMG! Can this be shorter?
{
// do stuff
}
}
}
函数dostuff(数据,选项){
对于(变量i=0;i
顺便说一句,我不是在追求一些不可能读懂的高尔夫黑魔法代码。只是一些简短而合理的东西。如果存在限制,您只需要测试限制,所以在担心对数据执行任何操作之前,只需检查选项数组是否定义了元素 如果选项数组包含元素,则可以使用嵌套循环对照选项中的每个元素检查数据中的每个元素。如果选项通过您的检查,请执行您需要的任何处理:
function dostuff (data, option) {
// Option MUST be an array with length
// if you're going to check data against the options
// so:
if(typeof option !== 'undefined' && option.length > 0) {
for (var i = 0; i < data.length; i++) {
for(var p = 0; p < option.length; p++) {
if(test(data[i].x) [AGAINST] option[p] [IS ALLOWED]) {
processDataAsNeeded(data[i].x);
} else {
// Nothing needs to happen here, as data[i].x was restricted by option[p]
}
}
}
} else { // Here there are no restrictions, so process everything
for (var i = 0; i < data.length; i++) {
processDataAsNeeded(data[i].x);
}
}
}
函数dostuff(数据,选项){
//选项必须是长度为的数组
//如果要对照选项检查数据
//因此:
如果(选项的类型!==“未定义”&&option.length>0){
对于(变量i=0;i
如果我理解正确,我认为您可以将If语句简化为:
if (typeof(option) == "undefined" || !option.length) {
continue;
} else {
if (test(data[i].x)) {
// do stuff
}
}
或者更短
if ( !(typeof(option) == "undefined" || option.length) ) {
if (test(data[i].x)) {
// do stuff
}
}
请添加一些函数调用和所需结果。好的(test(data[i].x)不需要在每一行上进行测试…不完全-函数需要测试数组中的每个元素,如果没有限制,则在元素满足某个测试()时执行操作;如果有限制,则仅在两个测试()时执行操作&&限制也匹配。@Erics当您说“需要测试数组的每个元素”时,您的意思是测试数据数组的每个元素还是选项数组的每个元素?始终测试数据数组的每个元素,如果指定,还根据限制进行测试。答案已更新-这更符合您的要求吗?什么这是
test()?