1. 程式人生 > 其它 >JS 判斷陣列包含另一個數組

JS 判斷陣列包含另一個數組

ES6方法:

1、findIndex (跟find類似,返回值不一樣,findIndex找到則返回元素下標,否則返回-1)

function  getInclude(arr1, arr2) {
  let temp = []
     for (const item of arr2) {
        arr1.findIndex(i => i === item) !== -1 ? temp.push(item) : ''
    }
  return temp.length ? true : false
}
console.log('findIndex1', getInclude([3
,2,5,8,4,7,6,9], [1,0,0])) // false console.log('findIndex2', getInclude([3,2,5,8,4,7,6,9], [9,0,0])) // true

2、find   (返回第一個符合條件的陣列元素,沒找到則返回undefined)

// 1、find()
function  getInclude(arr1, arr2) {
  let temp = []
    for (const item of arr2) {
      arr1.find(i => i === item) ? temp.push(item) : ''
    }
  
return temp } console.log('find1', getInclude([3,2,5,8,4,7,6,9], [1,0,0])) // [] console.log('find2', getInclude([3,2,5,8,4,7,6,9], [9,6,7])) // [9, 6, 7]

3、includes (方法返回一個布林值,表示某個陣列是否包含給定的值,與字串的includes方法類似)

// 3、includes
function  getInclude3(arr1, arr2) {
  let temp = []
     for (const item of arr2) {
      arr1.includes(item) 
? temp.push(item) : '' } return temp.length ? true : false } console.log('includes1', getInclude3([3,2,5,8,4,7,6,9], [1,0,0])) // false console.log('includes2', getInclude3([3,2,5,8,4,7,6,9], [9,0,0])) // true

ES5可用方法:

1、indexOf (判斷一個元素是否存在於陣列中,若不存在返回-1,若存在就返回它第一次出現的位置)

// 1、indexOf()
function  getInclude4(arr1, arr2) {
  let temp = []
     for (const item of arr2) {
    arr1.indexOf(item) !== -1 ? temp.push(item) : ''
  }
  return temp.length ? true : false
}
console.log('indexOf', getInclude4([3,2,5,8,4,7,6,9], [1,0,0])) // false
console.log('indexOf', getInclude4([3,2,5,8,4,7,6,9], [9,0,0])) // true

2、filter(過濾元素,返回一個新陣列,新的陣列由每次函式返回值為true對應的元素組成,原陣列不受影響)

// 2、filter()
function  getInclude5(arr1, arr2) {
  return arr1.filter((item) => {
    return arr2.includes(item)
  })
}
console.log('filter', getInclude5([3,2,5,8,4,7,6,9], [1,0,0])) // []
console.log('filter', getInclude5([3,2,5,8,4,7,6,9], [9,0,0])) // [9]

總結:
也可使用map、some、every、forEach來操作返回符合要求的結果,甚至可以兩層for迴圈也可實現,若是要求全包含(arr1=[3,5,8,4,7,6,9]; arr2=[8,6,9])像這種的就需要知道兩個陣列的長度了,具體場景具體解決。
補充一點:forEach允許改變原資料。