两个数组(有时候A数组长、有时候B数组长)不过我这边A数组是固定的
如(B数组长):
A = [
{device_code: 'a', name:'a'},
{device_code: 'b', name:'b'}
]
B = [
{device_code: 'a', name:'testA'},
{device_code: 'c', name:'testC'},
{device_code: 'd', name:'testD'}
]
如(A数组长):
A = [
{device_code: 'a', name:'a'},
{device_code: 'b', name:'b'}
]
B = [
{device_code: 'a', name:'testA'}
]
需求就是把A数组的数据判断是否(在B里面是否存在,存在的话就把name覆盖,没有的话就把name值改成 'found')
解决方法
需要根据数组的长度来决定(长的foreach写外面、短的foreac写里面)
/*
var A = [
{device_code: 'a', name:'a'},
{device_code: 'b', name:'b'}
]
var B = [
{device_code: 'a', name:'testA'},
{device_code: 'c', name:'testC'},
{device_code: 'd', name:'testD'}
]
*/
var A = [
{device_code: 'a', name:'a'},
{device_code: 'b', name:'b'}
]
var B = [
{device_code: 'a', name:'testA'}
]
console.log('A --- length ---' + A.length)
console.log('B --- length ---' + B.length)
var fatherArr = [] // 父数组(长)
var sonArr = [] // 子数组(短)
if (A.length >= B.length) { // 判断谁更长
fatherArr = A
sonArr = B
// 循环判断
fatherArr.forEach((fatherVal) => {
sonArr.forEach((sonVal) => {
if (sonVal.device_code === fatherVal.device_code) {
console.log('A === ' + sonVal.device_code)
fatherVal.name = sonVal.name // name
fatherVal.state = 'true' // 做标记代表循环处理过了
}
})
})
} else {
fatherArr = B
sonArr = A
// 循环判断
fatherArr.forEach((fatherVal) => {
sonArr.forEach((sonVal) => {
if (sonVal.device_code === fatherVal.device_code) {
console.log('B === ' + sonVal.device_code)
sonVal.name = fatherVal.name // name
sonVal.state = 'true' // 做标记代表循环处理过了
}
})
})
}
A.forEach((val) => {
if ('state' in val) {
console.log('have state')
} else {
console.log('no have state')
val.name = 'found'
}
})
console.log(A)