JS常见的数组操作方法

1、将数组对象中符合要求的数据的值另存成一个新数组(hasOwnProperty、push)


const data = {
  "AAA": {
    "id": "AAA",
    "useful": false
  },
  "BBB": {
    "id": "BBB",
    "useful": true
  },
  "CCC": {
    "id": "CCC",
    "useful": false
  },
}

将其中useful的值为false的这条数据的bluId组成一个数组isUseful,

useful的值为true的这条数据的bluId组成一个数组noUseful。

答案:

const data = {
  "AAA": {
    "id": "AAA",
    "useful": false
  },
  "BBB": {
    "id": "BBB",
    "useful": true
  },
  "CCC": {
    "id": "CCC",
    "useful": false
  },
}

// 有用的id
const isUseful= [];
for (const key in data) {
  if (data.hasOwnProperty(key) && data[key].useful) {
    isUseful.push(data[key].bluId);
  }
}

// 无用的id
const noUseful= [];
for (const key in data) {
  if (data.hasOwnProperty(key) && !data[key].useful) {
    noUseful.push(data[key].bluId);
  }
}

console.log("有用的id列表:", isUseful);
console.log("无用的id列表:", noUseful);

2、将两个数组相同的值组成一个新数组(filter、includes)

const result = ["AAA", "BBB", "CCC", "DDD", "EEE", "FFF"];
const noUseful = ["BBB","CCC","DDD","EEE","WWW","HHH","KKK"];

使用js找出数组result在数组noUseful中同样存在的值,组成一个新的数组

答案:

const result = ["AAA", "BBB", "CCC", "DDD", "EEE", "FFF"];
const noUseful = ["BBB","CCC","DDD","EEE","WWW","HHH","KKK"];

const resultNoUseful = result.filter(item => noUseful.includes(item));
console.log(resultNoUseful ); // ["BBB","CCC","DDD","EEE"]

3、判断两个数组是不是除顺序外完全相同(Set)

已知

const arr1 = ["AAA", "BBB", "CCC", "DDD", "EEE", "FFF"];
const arr2 = ["BBB","CCC","DDD","EEE","FFF","AAA"];

忽略这两个数组中值的顺序,判断这两个数组中的存在的值是不是一样

答案:

const arr1 = ["AAA", "BBB", "CCC", "DDD", "EEE", "FFF"];
const arr2 = ["BBB","CCC","DDD","EEE", "FFF","AAA"];

const set1 = new Set(arr1);
const set2 = new Set(arr2);

if (set1.size === set2.size && [...set1].every(element => set2.has(element))) {
  console.log("两个数组中的值相同");
} else {
  console.log("两个数组中的值不相同");
}

4、判断两个数组是不是完全相同(every)

const arr1 = ["DWJBACTM"];
const arr2 = ["DWJBACTM", "DWJBPUBL", "DWJBCDPR"];

判断两个数组是不是完全相同

const arr1 = ["DWJBACTM"];
const arr2 = ["DWJBACTM", "DWJBPUBL", "DWJBCDPR"];
const arr3 = ["DWJBACTM"];

方法一:
if (arr1.every((value, index) => value === arr2[index])) {
  console.log('两个数组完全相同');
} else {
  console.log('两个数组不完全相同');
}

方法二:


function arraysEqual(arr1, arr2) {
  if (arr1.length !== arr2.length) {
    return false;
  }

  return arr1.every((element, index) => {
    return element === arr2[index];
  });
}



console.log(arraysEqual(arr1, arr2)); // false
console.log(arraysEqual(arr1, arr3)); // true

5、判断数组A在B中是否存在,改变数组A中在B中存在的数据的某个值(some)

const arr = [
  { chooseColumnFlag: "Y", id: "49" },
  { chooseColumnFlag: "Y", id: "59" },
  { chooseColumnFlag: "Y", id: "62" }
];

const val = [
  { chooseColumnFlag: "Y", id: "49" },
  { chooseColumnFlag: "Y", id: "62" }
];

写一段代码,如果数组arr中的值在数组val中存在,就将数组arr中的chooseColumnFlag设置成’Y’,否则设置为’N

const arr = [
  { chooseColumnFlag: "Y", id: "49" },
  { chooseColumnFlag: "Y", id: "59" },
  { chooseColumnFlag: "Y", id: "62" }
];

const val = [
  { chooseColumnFlag: "Y", id: "49" },
  { chooseColumnFlag: "Y", id: "62" }
];

arr.forEach((item) => {
  const flag = val.some(valItem => valItem.id === item.id);
  item.chooseColumnFlag = flag ? "Y" : "N";
});

console.log(arr);

6、数组B剔除数组A中包含的值(filter、includes)

const arrayA = ["DWJBACTM"];
const arrayB = ["DWJBACTM", "DWJBPUBL", "DWJBCDPR"];

数组B剔除数组A中包含的值,并组成一个新数据

const arrayA = ["DWJBACTM"];
const arrayB = ["DWJBACTM", "DWJBPUBL", "DWJBCDPR"];

const newArray = arrayB.filter(item => !arrayA.includes(item));

console.log(newArray); // 输出 [ "DWJBPUBL", "DWJBCDPR" ]

7、找出数组中id为‘xx’时,另一个属性的值(filter、map)

const arr = [{a:'11',name:'nnn'},{a:'12',name:'dasd'}];

找出当a等于11时,name的值

const arr = [{a:'11',name:'nnn'},{a:'12',name:'dasd'}];

const result = arr.filter(obj => obj.a === '11').map(obj => obj.name);

console.log(result); // 输出 ['nnn']



const arr = [
  { a: '11', name: 'nnn' },
  { a: '12', name: 'dasd' },
  { a: '11', name: 'xxx' }
];

const newArr = arr.filter(item => item.a === '11').map(item => item.name);

console.log(newArr); // 输出 [ 'nnn', 'xxx' ]

8已知一个数组arr1[{name:‘simon’,age:‘12’},{name:‘abby’,age:‘18’}],数组arr2[{id:‘simon’,hobby:‘basketball’},{id:‘abby’,hobby:‘paino’},{id:‘jason’,hobby:‘music’}]。请将数组2中id与数组1中name相同的值的hobby,正确添加到arr1中,构成新的数组

let arr1 = [{name: 'simon', age: '12'}, {name: 'abby', age: '18'}];
let arr2 = [{id: 'simon', hobby: 'basketball'}, {id: 'abby', hobby: 'piano'}, {id: 'jason', hobby: 'music'}];

// 遍历arr2,将id与arr1中name相同的值的hobby添加到arr1中
arr2.forEach(item => {
  let nameIndex = arr1.findIndex(e => e.name === item.id);
  if (nameIndex !== -1) {
    arr1[nameIndex] = Object.assign(arr1[nameIndex], {hobby: item.hobby});
  }
});

console.log(arr1);
//[{name: 'simon', age: '12', hobby: 'basketball'}, {name: 'abby', age: '18', hobby: 'piano'}]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值