2012-08-15 243 views
2

我是以下格式的數組。我從一個文件data.json閱讀下面的數據是這樣將一個陣列複製到另一個陣列

$.getJSON('data/data.json', function (ids) { 
      for (var i = 0; i < ids.length; i++) { 
       var id = ids[i]; 
       teams = id; 
       $('<li>' + id + '</li>').appendTo(span); 

      } 
     }); 

這裏是數據

[ 
"109 200", 
"109 201", 
"102 202", 
"103 202" 
] 

所以,我想要的是複製這個陣列到另一個讓說c但在下面的表格

[ 
"109", 
"109", 
"102", 
"103", 
"200", 
"201", 
"202", 
"202" 
] 

我該如何使用JavaScript或jQuery來做到這一點?

+0

+1爲好問題 – Nope 2012-08-15 11:11:17

+2

Ahmed的回答是最少量的代碼,它是工作。 – Nope 2012-08-15 11:20:30

+0

@FrançoisWahl:不,結果不符合OP的要求。 – 2012-08-15 11:57:09

回答

4

迭代在結果集,由空格分開的每個元素,並添加所得兩個數字到兩個不同的陣列,每一個代表一個減半,最後,串連左部與右部分:

var left = [], 
    right = []; 
for (var i = 0; i < ids.length; i++) { 
    var pair = ids[i].split(" "); 
    left.push(pair[0]); 
    right.push(pair[1]); 
} 
var result = left.concat(right); 
+0

它看起來不像是會得到訂購OP想要的。通過編輯,它可以。 ;) – HonkyTonk 2012-08-15 11:10:27

+0

@HonkyTonk:的確,謝謝,我編輯了我的答案。 – 2012-08-15 11:12:09

+0

沒問題。我在ECMAScript上太糟糕了,無法提供正確的解決方案,所以我很高興你能做到。 – HonkyTonk 2012-08-15 11:13:15

3

只需使用

ids.join(' ').split(' '); 

編輯 這將尊重訂單。

$.map(ids,function(i){ return i.split(' ')[0]; }).concat($.map(ids,function(i){ return i.split(' ')[1]; })) 
+0

+1非常非常好,很短的解決方案。似乎正常工作,保持訂單並將其分開:http://jsfiddle.net/6rgd3/ – Nope 2012-08-15 11:15:11

+0

但它不保留OP所需的訂單。 – 2012-08-15 11:57:32

+0

@João:我注意到,現在你確實是對的。 – Nope 2012-08-15 12:30:20

1

雖然João有正確的方法來做到這一點,我注意到你想要這些元素添加到數組的順序。要得到你所說的你之後,試試這個:

$.getJSON('data/data.json', function (ids) { 
    var leftArray = new Array(); 
    var rightArray = new Array(); 

    for (var i = 0; i < ids.length; i++) { 
     var splitted = ids[i].split(" "); 

     if (splitted[0] !== null) { 
      leftArray.push(splitted[0]); 
     } 

     if (splitted[1] !== null) { 
      rightArray.push(splitted[1]); 
     } 
    } 

    // now join the two arrays together to get your order 
    var joinedArray = leftArray.conact(rightArray); 

    // now build your elements with the data 
    for (var i = 0; i < joinedArray.length; i++) { 
     $('<li>' + joinedArray[i] + '</li>').appendTo(span); 
    } 
});