2017-02-20 2 views
1

다음 코드를 객체 유사성.자바 스크립트 그룹은 내가 자바 스크립트 JSON에있는

최종 결과는 다음과 같이해야한다 :

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

이'정적 접두사가 될 string' 것? – RomanPerekhrest

+0

이 당신에게 줄 것이다 생각 될 수있다 http://underscorejs.org/#groupBy –

+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);

+0

이것은 완벽합니다! 문자열 : 내가 원하는 경우 난 그냥 같은 전용 용기에 둥지에 모든 그룹 궁금 {문자열 1 : {...}, 문자열 2를 : {...}}? –

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);

관련 문제