分享
三行代码  ›  专栏  ›  技术社区  ›  Smokey Dawson

从具有自定义键值的对象数组创建对象

  •  0
  • Smokey Dawson  · 技术社区  · 1 年前

    现在我知道有几个问题是类似的 this question this question 但都没有回答我的问题。

    好吧…

    假设我有一个api调用,得到这样的响应

    [
      {
         amount: 23,
         bill: 47,
         otherData: null,
         title: 'cool title'
      },
      {
         amount: 223,
         bill: 427,
         otherData: null,
         title: 'cooler title'
      },
      {
         amount: 2313,
         bill: 437,
         otherData: null,
         title: 'super cool title'
      },
      {
         amount: 123,
         bill: 147,
         otherData: null,
         title: 'coolest title'
      }
    ]
    

    有没有方法可以从这个数组中创建一个新对象,并使用对象中的一个属性使用自定义键名??所以期望的输出是..

    {
      coolTitle: {
         amount: 23,
         bill: 47,
         otherData: null,
         title: 'cool title'
      },
      coolerTitle: {
         amount: 223,
         bill: 427,
         otherData: null,
         title: 'cooler title'
      },
      superCoolTitle: {
         amount: 2313,
         bill: 437,
         otherData: null,
         title: 'super cool title'
      },
      coolestTitle: {
         amount: 123,
         bill: 147,
         otherData: null,
         title: 'coolest title'
      }
    }
    

    现在我知道我可以把一个数组的对象转换成这样的对象。

    var result = {};
    for (var i=0; i<array.length; i++) {
      result[array[i].key] = array[i].value;
    }
    

    但我不知道如何从每个对象中获取标题,camelcase,然后创建自定义键和对象

    我甚至不确定这样的事情是否可能,任何帮助都将不胜感激

    谢谢

    2 回复  |  直到 1 年前
        1
  •  1
  •   CertainPerformance    1 年前

    若要获取属性名,请提取 title 并将其空格字符替换为大写字符。那么,就这么简单 reduce -进入一个物体:

    const input=[{amount:23,bill:47,otherData:null,title:'cool title'},{amount:223,bill:427,otherData:null,title:'cooler title'},{amount:2313,bill:437,otherData:null,title:'super cool title'},{amount:123,bill:147,otherData:null,title:'coolest title'}]
    
    console.log(
      input.reduce((a, item) => {
        const { title } = item;
        const camel = title.replace(/ ./g, chars => chars[1].toUpperCase());
        a[camel] = item;
        return a;
      }, {})
    );
        2
  •  0
  •   brk    1 年前

    使用 map 和; reduce ,reduce方法将返回具有自定义键的新对象。在reduce方法中使用 地图 。这将创建一个值为 title 喜欢 ['cool','title'] . 在同一个map方法中创建一个字符串 将单词的第一个字符转换为大写,然后 join 加入所有单词

    let oldArr = [{
        amount: 23,
        bill: 47,
        otherData: null,
        title: 'cool title'
      },
      {
        amount: 223,
        bill: 427,
        otherData: null,
        title: 'cooler title'
      },
      {
        amount: 2313,
        bill: 437,
        otherData: null,
        title: 'super cool title'
      },
      {
        amount: 123,
        bill: 147,
        otherData: null,
        title: 'coolest title'
      }
    ]
    
    
    
    let newArray = oldArr.reduce(function(acc, curr) {
      let crtTitle = curr.title.split(' ').map(function(item, index) {
        if (index !== 0) {
          return item.substring(0, 1).toUpperCase() + item.substring(1, item.length);
        } else {
          return item;
        }
    
      }).join('');
      acc[crtTitle] = curr;
      return acc
    }, {});
    console.log(newArray)