美文网首页
利用reduce和filter,对对象数组操作

利用reduce和filter,对对象数组操作

作者: 王小博er | 来源:发表于2021-01-31 16:25 被阅读0次

数组

let data = [
        { name: 'tom', id: 1 },
        { name: 'mike', id: 1 },
        { name: 'tom', id: 1 },
        { name: 'jack', id: 2 },
        { name: 'amy', id: 2 },
        { name: 'sam', id: 3 },
        { name: 'eric', id: 3 }
    ]

结果

结果

代码实现

参数

reduce参数 描述
回调函数 func
初始值(可选) initValue
func参数 描述
total (必) 初始值(计算结束后的返回值)
currentValue (必) 当前元素
currentIndex 当前元素的索引
arr 当前元素所属的数组对象

小知识点

* js对象属性通过点(.) 和 方括号([])

点: 静态的。右侧必须是一个以属性名称命名的简单标识符。属性名用一个标识符来表示。标识符必须直接 出现再js程序中,它们不是数据类型,因此程序无法修改它们。
中括号: 动态的。方括号里必须是一个计算结果为字符串的表达式,属性名通过字符串表示。字符串是js的数据类型,在程序运行时可以修改和创建它们。

    var obj = {};
    obj.name = '张三';
    var myName = 'name';
    console.log(obj.myName);//undefined,访问不到对应的属性
    console.log(obj[myName]);//张三
 
    var person = {
        name:'gogo'
    };
    console.log(person["name"]);//gogo
    console.log(person.name); //gogo

* 连接字符串

/* 旧方法*/
const a = "hello"
const b = a + "world"
/* 新方法*/
const a = "hello"
const b = `${a} world`

* arr.filter()方法

filter参数 描述
currentValue (必) 当前元素
currentIndex 当前元素的索引
arr 当前元素所属的数组对象

完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    let data = [
        { name: 'tom', id: 1 },
        { name: 'mike', id: 1 },
        { name: 'tom', id: 1 },
        { name: 'jack', id: 2 },
        { name: 'amy', id: 2 },
        { name: 'sam', id: 3 },
        { name: 'eric', id: 3 }
    ]
    
    let hash = {}
    data = data.reduce((item, next) => {
      // 根据 id 去重
      if(!hash[next.id]) {// 如果对象id,不存在push
        hash[next.id] = true 
        item.push(next)
      }else{// 将名字连接起来
            item.filter(n=>{
                if(n.id==next.id){
                    n.name = `${n.name} 、 ${next.name}`
                    return n.name 
                }
            })
      }
      return item
    }, [])
    console.log(data) 
</script>
</html>

相关文章

网友评论

      本文标题:利用reduce和filter,对对象数组操作

      本文链接:https://www.haomeiwen.com/subject/exjrtltx.html