Javascript组的相似之处

时间:2017-02-20 11:34:49

标签: javascript json

我在JavaScript JSON对象中有以下代码:

{
apple: 'value',
orange: 'value',
string1Pear: 'value',
string1Banana: 'value',
string2Pear: 'value',
string2Banana: 'value',
pineapple: 'value'
}

我需要对给定对象的类似键进行分组,而不知道是否存在这样或者它们看起来像什么。

最终结果应该是这样的:

{
apple: 'value',
orange: 'value',
string: {
   string1: {
      string1Pear: 'value',
      string1Banana: 'value',
   },
   string2: {
      string2Pear: 'value',
      string2Banana: 'value',
   },
}
pineapple: 'value'
}

2 个答案:

答案 0 :(得分:1)

使用Object.keys()String.prototype.match()Array.prototype.reduce()函数的解决方案:



var data = { apple: 'value', orange: 'value', string1Pear: 'value', string1Banana: 'value', string2Pear: 'value', string2Banana: 'value', pineapple: 'value'},

    result = Object.keys(data).reduce(function (r, k) {
        var parts = k.match(/(\w+\d+)([A-Z]\w+)/);
        if (!parts) {
            r[k] = data[k];
            return r;
        }
        r[parts[1]] = r[parts[1]] || {};
        r[parts[1]][k] = data[k]
        return r;
    }, {});

console.log(result);




答案 1 :(得分:0)

如果您的密钥是驼峰式的,并且您希望始终按照第一个大写字母之前的任何字符串进行分组,则可以使用:

const fruits = {
      apple: 'value',
      orange: 'value',
      string1Pear: 'value',
      string1Banana: 'value',
      string2Pear: 'value',
      string2Banana: 'value',
      pineapple: 'value'
  }

  // Split by uppercase letters and take the first word.
  function getGroup(key) {
      return key.split(/(?=[A-Z])/)[0];
  }

  // Group keys 
  let newObject = {};
  const keys = Object.keys(fruits);
  
  for (var i = 0; i < keys.length; i++) {
      const key = keys[i];
      const group = getGroup(key);
      
      if (group === key) {
        newObject[group] = fruits[key];
      }
      else if (newObject.hasOwnProperty(group)) {
        newObject[group][key] = fruits[key];
      }
      else {
         newObject[group] = {};
         newObject[group][key] = fruits[key];
      }
  }
  
  console.log(newObject);