2017-08-09 26 views
1

我希望能夠檢查參數對象爲特定的交流對象類型,這樣交替的數字和布爾值:我轉身(後檢查在辯論

number, boolean, number, boolean ==> 1, true, 2, false....etc 

我想這arguments對象到一個數組):

var check = args.some (function (val, i) { 
    var type = typeof(val); 
    return i % 2 == 0 ? type === 'number' : type === 'boolean'; 
}); 

是否可以使用某種方法?

+0

你想檢查參數是什麼類型?您的代碼讓我困惑 – baao

+0

請詳細描述您想達到的目標。 – GProst

+0

@NinaScholz我以爲'some'會停止,如果'false','every'繼續.. –

回答

1

您可以使用Array#every和一個數組來檢查類型。

every的方法執行一次提供callback函數爲每個數組中存在的元素,直到它找到一個其中callback返回falsy值。如果找到這樣的元素,則每種方法立即返回false。否則,如果callback爲所有元素返回真值,則every返回truecallback僅對已分配值的數組索引進行調用;對於已刪除或從未分配過值的索引,不會調用它。

function isAlternate(v, i) { 
 
    console.log(i, v, ['number', 'boolean'][i % 2], typeof v === ['number', 'boolean'][i % 2]); 
 
    return typeof v === ['number', 'boolean'][i % 2]; 
 
} 
 

 
console.log([1, 2, 3].every(isAlternate)); 
 
console.log([1, true, 2, false].every(isAlternate)); 
 
console.log([null, null].every(isAlternate));
.as-console-wrapper { max-height: 100% !important; top: 0; }

function check(array) { 
 
    return array.every(function (v, i) { 
 
     if (typeof v === ['number', 'boolean'][i % 2]) { 
 
      return true; 
 
     } 
 
     console.log('wrong item found at', i); 
 
    }); 
 
} 
 

 
console.log(check([1, 2, 3])); 
 
console.log(check([1, true, 2, false])); 
 
console.log(check([null, null]));
.as-console-wrapper { max-height: 100% !important; top: 0; }

隨着ES6,你可以使用Array#findIndex

function getWrongIndex(array) { 
 
    return array.findIndex((v, i) => typeof v !== ['number', 'boolean'][i % 2]); 
 
} 
 

 
console.log(getWrongIndex([1, 2, 3]));   // 1 
 
console.log(getWrongIndex([1, true, 2, false])); // -1 no wrong index found 
 
console.log(getWrongIndex([null, null]));  // 0