js如何找出此类数组?

const allcode = [1,2,3,4,5,6,7,8];//所有的code
const usecode = [1,6];//已使用的code

js如何找出未使用的code,unusecode?
阅读 2.7k
5 个回答
//差集
allcode.filter(v => allcode.includes(v) ^ usecode.includes(v));
allcode.filter(i => !usecode.includes(i))   //[ 2, 3, 4, 5, 7, 8 ]

去除相同值,返回新数组写法:

var allcode = [1,2,3,4,5,6,7];
var usecode = [1,2,5];
var newArr = [];
var tmp = allcode.concat(usecode);
var o = {};
for (var i = 0; i < tmp.length; i ++) (tmp[i] in o) ? o[tmp[i]] ++ : o[tmp[i]] = 1;
for (x in o) if (o[x] == 1) newArr .push(x);


console.log(newArr)    // ["3", "4", "6", "7"]

一、你可以这样设置

const allCodes = [
    {
        code: 1,
        isUse: false,
    },
    {
        code: 2,
        isUse: true,
    }
]

将一个 code 和一个状态值绑定在一起,当这个code使用过,可以将它设置为 true

// 比如第一个 code 你用过了
allCodes[0].isUse = true

二、如果你是用两个数组来维护这个状态,每次可以使用一个 for 循环,来判断

const allCodes = [1, 2, 3, 4, 5]
const unUseCodes = [1, 2]

function getUseData(allCodes, unUseCodes) {
    const useData = []
    for (let i = 0, len = allCodes.length; i < len; i++) {
        const tempCode = allCodes[i]
        if (!unUseCodes.includes(tempCode) {
            useData.push(tempCode)
        }
    }
    
    return useData
}

const useData = getUseData(allCodes, unUseCodes)

更简洁的写法,使用 filter 楼上已经有答案

使用filter进行过滤:

const unusecode = allcode.filter(code => usecode.indexOf(code)===-1)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题