【问题标题】:Duplicate arrays object value create as multi-dimensional array重复数组对象值创建为多维数组
【发布时间】:2020-02-19 14:51:12
【问题描述】:

我想从对象创建过滤器,该对象是从 from 传递的,但过滤器表单中可以有多个值。 我想将一个数组传递给我的过滤器,如果有多个值,它可以是多维数组。

例如,从带有serializeArray 的表单通过

0: {name: "holiday", value: "newyear"}
1: {name: "holiday", value: "christmas"}
2: {name: "startDate", value: ""}
3: {name: "genre", value: ""}
4: {name: "city", value: ""}

但我想创造

0: {name: "holiday", value: {"christmas", "newyear"}}
1: {name: "startDate", value: ""}
2: {name: "genre", value: ""}
3: {name: "city", value: ""}

然后通过我自己的规则和键将其传递给filter()

我想问一下,如何验证存在多个具有重复name 属性的值,并创建新对象。

【问题讨论】:

    标签: javascript arrays object filter


    【解决方案1】:

    您可以使用reduce 对对象中的值进行分组,然后使用Object.values 获取一个数组。

    const data = [{name: "holiday", value: "newyear"}, {name: "holiday", value: "christmas"}, {name: "startDate", value: ""}, {name: "genre", value: ""}, {name: "city", value: ""}]
    
    const obj = data.reduce((r, e) => {
      if(!r[e.name]) r[e.name] = {...e}
      else r[e.name].value = [].concat(r[e.name].value, e.value)
      return r
    }, {})
    
    const result = Object.values(obj)
    console.log(result)

    【讨论】:

      【解决方案2】:

      按名称分组,然后提取分组值。

      let arr =[{name: "holiday", value: "newyear"},{name: "holiday", value: "christmas"},{name: "startDate", value: ""},{name: "genre", value: ""},{name: "city", value: ""}],
          result = Object.values(arr.reduce((a, {name, value: v}) => {
            (a[name] || (a[name] = {name, value: []})).value.push(v);
            return a;
          }, {}));
      
      console.log(result);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-19
        • 2014-08-14
        • 2022-01-02
        • 2021-10-27
        • 2019-07-18
        • 1970-01-01
        • 2019-02-27
        • 2019-06-03
        相关资源
        最近更新 更多