2017-03-31 55 views
0

創建對象的新數組我有一個現有的陣列,我想在JS重新格式化。這是現有的陣列,其中每個項目是一個對象:從現有陣列

[ 
{ 
    end_time:"7.14", 
    pk:45065, 
    start_time:"4.51", 
    text:"Lorem Ipsum" 
}, 
{ 
    end_time:"9.00", 
    pk:45066, 
    start_time:"7.14", 
    text:"Lorem Ipsum Something" 
}, 
{ 
    end_time:"13.09", 
    pk:450667 ,  
    start_time:"9.00", 
    text:"Lorem Ipsum Something" 
}, 
{ 
    end_time:"17.01", 
    pk:45068, 
    start_time:"13.09", 
    text:"Lorem Ipsum" 
}, 
{ 
    end_time:"25.10", 
    pk:45069, 
    start_time:"17.01", 
    text:"Lorem Ipsum Something" 
}, 
{ 
    end_time:"28.06", 
    pk:450670 ,  
    start_time:"25.10", 
    text:"Lorem Ipsum Something" 
}, 
] 

我想創造一個在舊陣列每三個對象變爲一個對象的新數組中,像這樣的對象的一個​​新的數組:

[ 
    segment: { 
    phrase: { 
     end_time:"7.14", 
     pk:45065, 
     start_time:"4.51", 
     text:"Lorem Ipsum" 
    }, 
    phrase: { 
     end_time:"9.00", 
     pk:45066, 
     start_time:"7.14", 
     text:"Lorem Ipsum Something" 
    }, 
    phrase: { 
     end_time:"13.09", 
     pk:450667 ,  
     start_time:"9.00", 
     text:"Lorem Ipsum Something" 
    } 
    }, 
    segment { 
    phrase: { 
     end_time:"17.01", 
     pk:45068, 
     start_time:"13.09", 
     text:"Lorem Ipsum" 
    }, 
    phrase: { 
     end_time:"25.10", 
     pk:45069, 
     start_time:"17.01", 
     text:"Lorem Ipsum Something" 
    }, 
    phrase: { 
     end_time:"28.06", 
     pk:450670 ,  
     start_time:"25.10", 
     text:"Lorem Ipsum Something" 
    }, 
    } 
] 

我所用最努力的是如何拔出每三個項目,推動以地圖或循環我猜裏面的新段對象。我不確定這是最有效的方法。任何幫助深表感謝。

+0

什麼在邊緣情況下'arr.length%3 == 0' –

+1

相位,相位,相...相同的密鑰發生!? –

+5

你不能對許多對象屬性使用相同的密鑰,所以這不起作用。 –

回答

0

減少機能下降從json陣列的每一個對象的新對象,其中key短語內並且它的值是指定的對象。然後,只是把結果賦值給一個新創建的對象作爲鍵的值。

var json = [{end_time:"7.14",pk:45065,start_time:"4.51",text:"Lorem Ipsum"},{end_time:"9.00",pk:45066,start_time:"7.14",text:"Lorem Ipsum Something"},{end_time:"13.09",pk:450667,start_time:"9.00",text:"Lorem Ipsum Something"},{end_time:"17.01",pk:45068,start_time:"13.09",text:"Lorem Ipsum"},{end_time:"25.10",pk:45069,start_time:"17.01",text:"Lorem Ipsum Something"},{end_time:"28.06",pk:450670,start_time:"25.10",text:"Lorem Ipsum Something"}], 
 
    res = json.reduce(function(s,a){ 
 
    obj = {}; 
 
    obj.phrase = a; 
 
    s.push(obj); 
 
    return s; 
 
    }, []); 
 
    
 
    var object = {}; 
 
    object.segment = res; 
 
    var result = [object]; 
 
    
 
    console.log(result);

+0

你會這麼好心來解釋你的代碼做什麼,以及如何解決這個問題? –

0
  1. 你想要的結果應該是對象數組沒有字符串鍵。
  2. 對象應該有獨特的按鍵,所以提出的解決方案附加的後綴爲「段」和「短語」鍵。
  3. 代碼:

var arr = [ 
 
    { 
 
    end_time:"7.14", 
 
    pk:45065, 
 
    start_time:"4.51", 
 
    text:"Lorem Ipsum" 
 
    }, 
 
    { 
 
    end_time:"9.00", 
 
    pk:45066, 
 
    start_time:"7.14", 
 
    text:"Lorem Ipsum Something" 
 
    }, 
 
    { 
 
    end_time:"13.09", 
 
    pk:450667 ,  
 
    start_time:"9.00", 
 
    text:"Lorem Ipsum Something" 
 
    }, 
 
    { 
 
    end_time:"17.01", 
 
    pk:45068, 
 
    start_time:"13.09", 
 
    text:"Lorem Ipsum" 
 
    }, 
 
    { 
 
    end_time:"25.10", 
 
    pk:45069, 
 
    start_time:"17.01", 
 
    text:"Lorem Ipsum Something" 
 
    }, 
 
    { 
 
    end_time:"28.06", 
 
    pk:450670 ,  
 
    start_time:"25.10", 
 
    text:"Lorem Ipsum Something" 
 
    }, 
 
]; 
 
var obj = {}; 
 
arr.forEach(arrayTransformClosure(obj)); 
 
document.getElementById('output').innerHTML = JSON.stringify(obj, null, 2); 
 
// Functions 
 
function arrayTransformClosure(obj) { 
 
    var phrase = 0; 
 
    var segment = 1; 
 
    return function (elem) { 
 
    ++phrase; 
 
    if (phrase == 1) { 
 
     obj['segment_' + segment] = { 
 
     ['phrase_' + phrase]: elem 
 
     }; 
 
    } else if (phrase <= 3) { 
 
     obj['segment_' + segment]['phrase_' + phrase] = elem; 
 
    } else { 
 
     phrase = 1; 
 
     ++segment; 
 
     obj['segment_' + segment] = { 
 
     ['phrase_' + phrase]: elem 
 
     }; 
 
    } 
 
    }; 
 
}
<pre id="output"></pre>