JS数据处理

一、替换属性名相同的对象的值

  1. 当新数据为对象时可以直接使用map替换
 const data = [{
    
    id: 1, value: 1}, {
    
    id: 2, value: 2}, {
    
    id: 3, value: 3}];
 const newData = {
    
    id: 3, value: 50}
 const res = data.map(item => item.id === newData.id ? newData : item);
 console.log(res)
 	// 0: {id: 1, value: 1}
	// 1: {id: 2, value: 2}
	// 2: {id: 3, value: 50}
  1. 当新数据为数组时需要联合forEach遍历改变value的值
 const data = [{
    
    id: 1, value: 1}, {
    
    id: 2, value: 2}, {
    
    id: 3, value: 3}];
 const newData = [{
    
    id: 1, value: 20},{
    
    id: 3, value: 30}]
 data.map(item=>{
    
    
      newData.forEach(nItem=>{
    
    
          item.value = item.id === nItem.id ? nItem.value : item.value
        })
     })
 console.log(data);
	// 0: {id: 1, value: 20}
	// 1: {id: 2, value: 2}
	// 2: {id: 3, value: 30}

二、数组对象去重

  1. 直接返回去重数据 (直接使用filter过滤就行)
 const myMap = new Map()
 const data = [{
    
    id: 1, value: 1}, {
    
    id: 2, value: 2}, {
    
    id: 3, value: 3},{
    
    id: 1, value: 3},{
    
    id: 2, value: 3}];
 const res = data.filter((item) => !myMap.has(item.id) && myMap.set(item.id, 1))
 console.log(res)
 	//0: {id: 1, value: 1}
 	//1: {id: 2, value: 2}
 	//2: {id: 3, value: 3}

  1. 将重复的对象返回 (需要使用map)
 const myMap = new Map()
 const newData = []
 const msg = []
 const data = [{
    
    id: 1, value: 1}, {
    
    id: 2, value: 2}, {
    
    id: 3, value: 3},{
    
    id: 1, value: 3},{
    
    id: 2, value: 3}];
 data.map(item=> {
    
    
      if(!myMap.has(item.id)){
    
    
          myMap.set(item.id) 
          newData.push(item)
      }else{
    
    
            msg.push(`过滤ID:${
    
    item.id}`)
         }
       })
 console.log(newData,msg);
 	//0: {id: 1, value: 1} 
	//1: {id: 2, value: 2}
	//2: {id: 3, value: 3}
	
	//0: "过滤ID:1"
	//1: "过滤ID:2"

三、判断对象类型数组中某个属性值是否全等

	const data = [{
    
    num:'123',age:'18'},{
    
    num:'123',age:'19'},{
    
    num:'2141',age:'20'},{
    
    num:'23423',age:'18'}]
	if (data.every(item => item.num === data[0].num)) {
    
    
	    console.log('全等')
	} else {
    
    
	    console.log('有不等的')
	}

四、数组在指定位置插入数据

	// 普通数组
	arr1 = ['a','b','c','d']
	arr2 = ['e','f','g']
	let index = arr1.indexOf('b')
	// 第一个参数表示需要插入的位置,第二个参数表示删除几个元素,0则不删除,第三个参数表示插入的数据
	arr1.splice(index ,0,...arr2) 
	console.log(arr1)
	//  ['a', 'e', 'f', 'g', 'b', 'c', 'd']

	// 对象数组
	arr1 = [{
    
    name:'xiaoming'},{
    
    name:'lihua'},{
    
    name:'wencai'}]
	arr2 = [{
    
    name:'jiechu'}]
	let index = arr1.findIndex(t=>t.name === 'lihua')
	arr1.splice(index ,0,...arr2) 
	// [{ "name": "xiaoming"},{"name": "jiechu"},{"name": "lihua"},{ "name": "wencai"}]

五、常用方法

1. forEach方法
当data是引用数据类型会改变原数组的值,当是基本数据类型不会改变原数组的值,没有返回值

		//基本数据类型
	   const data = [1,2,34,6]
       data.forEach(e=>{
    
    
            e = e+'a'
            console.log(e);
            //1a 2a 34a 6a
       })
       console.log(data);
       //[1,2,34,6]
		//引用数据类型
       const data = [{
    
    num:'123',age:'18'},{
    
    num:'123',age:'19'},{
    
    num:'2141',age:'20'},{
    
    num:'23423',age:'18'}]
       data.forEach(e=>{
    
    
            e.num = e.num+'a'
       })
       console.log(data);
        //    [{num: "123a",age: "18"},{num: "123a",age: "19"},{num: "2141a",age: "20"},{num: "23423a",age: "18"}]

当是引用数据类型时我们可以用一个值来接收,这样就不会改变原数组

	  const data = [{
    
    num:'123',age:'18'},{
    
    num:'123',age:'19'},{
    
    num:'2141',age:'20'},{
    
    num:'23423',age:'18'}]
       data.forEach(e=>{
    
    
           const obj = {
    
    ...e,num:e.num+'a'}
            console.log(obj);
            //{ "num": "123a","age": "18"},{"num": "123a","age": "19"},{"num": "2141a","age": "20"},{"num": "23423a","age": "18"}     
       })
       console.log(data);
       //[{"num": "123", "age": "18"},{"num": "123","age": "19"},{"num": "2141","age": "20"},{"num": "23423","age": "18"}]

2. map方法
当data是引用数据类型会改变原数组的值(不改变原数组可以用一个值来接收,参考forEach方法)
当是基本数据类型不会改变原数组的值,有返回值

	const data = [{
    
    num:'123',age:'18'},{
    
    num:'123',age:'19'},{
    
    num:'2141',age:'20'},{
    
    num:'23423',age:'18'}]
    const newData = data.map(e=>{
    
    
        e.num = e.num+"b"
        return e
    })
    console.log(data);
    console.log(newData);

3. filter方法
过滤匹配条件的数据组成一个新数组, 不改变原数组的值

	   const data = [{
    
    num:'123',age:'18'},{
    
    num:'123',age:'19'},{
    
    num:'2141',age:'20'},{
    
    num:'23423',age:'18'}]
       const newData = data.filter(e=>{
    
    
           return e.num === '123'
       })
       console.log(data);
       //[{"num": "123","age": "18"},{"num": "123","age": "19"},{"num": "2141","age": "20"},{"num": "23423","age": "18"}]
       console.log(newData);
       //[{"num": "123","age": "18"},{"num": "123","age": "19"}]

4. some方法
判断是否有符合条件的数据,一个为真则为真, 不改变原数组的值

       const data = [{
    
    num:'123',age:'18'},{
    
    num:'123',age:'19'},{
    
    num:'2141',age:'20'},{
    
    num:'23423',age:'18'}]
       const newData = data.some(e=>{
    
    
           return e.num === '123'
       })
       console.log(data);
       //[{"num": "123","age": "18"},{"num": "123","age": "19"},{"num": "2141","age": "20"},{"num": "23423","age": "18"}]
       console.log(newData);
       //true

5. every方法
判断是否有符合条件的数据,全部为真则为真, 不改变原数组的值

const data = [{
    
    num:'123',age:'18'},{
    
    num:'123',age:'19'},{
    
    num:'2141',age:'20'},{
    
    num:'23423',age:'18'}]
       const newData = data.some(e=>{
    
    
           return e.num === '123'
       })
       console.log(data);
       //[{"num": "123","age": "18"},{"num": "123","age": "19"},{"num": "2141","age": "20"},{"num": "23423","age": "18"}]
       console.log(newData);
       //false

5. findIndex方法
判断 数组中 是否存在 存在返回所在的位置 不存在返回 -1 不改变原数组

		const data = [{
    
    num:'123',age:18},{
    
    num:'123',age:19},{
    
    num:'2141',age:20},{
    
    num:'23423',age:18}]
       const newData = data.findIndex(e=>{
    
    
           return e.age > 18
       },1)
       console.log(data);
       //[{"num": "123","age": 18},{"num": "123","age": 19},{"num": "2141","age": 20},{"num": "23423","age": 18}]
       console.log(newData);
       //1

5. 两个数组求出差集

// 相当于 data1-data2
let data1 = [{
    
    num:1,age:18},{
    
    num:2,age:19},{
    
    num:3,age:20}]
let data2 = [{
    
    num:1,age:18},{
    
    num:2,age:19}]
const newData = data1 .filter(x => !data2 .find(y => x.num=== y.num)) || [] 
console.log(newData)
// [{num:3,age:20}]

持续更新~~~

猜你喜欢

转载自blog.csdn.net/qq_42048638/article/details/119967668