2016-08-01 77 views
0

我一直在使用數組,我想要的是創建一個公式,這將允許我循環包含對象的數組,並使用不同的值獲取鍵並將它們轉換爲多維數組(我需要保持鍵的順序)。我已經收到此陣,但現在我需要添加[「N/A」,「 - 」]在每一個位置的字符串是不一樣的,就像這樣:數組組織

var all = [ 
    {banana: 1, rose: 2, mouse: 9, apple: 5, ana: 4, carl: 'truck'}, 
    {banana: 1, rock: 58, car: 19, apple: 5, cheese: 3, carl: 'blue'}, 
    {banana: 1, cheese: 2, red: 14, clue: 89, apple: 5, ana: 8} 
]; 

//expected to get: 
var new-arr = [ [["ana", 4], ["n/a", "--"], ["carl", "truck"]], 
    ["n/a", "--"], ["cheese", 3], ["carl", "blue"]], 
    [["ana", 8], ["cheese", 2], ["n/a", "--"]] ]; 

這樣在最後,我中央社創建這樣

列表1清單:

  • 語錄:4
  • N/A: -
  • 卡爾:卡車

list2中:

  • N/A: -
  • 奶酪:3
  • 卡爾:藍色

list2中:

  • ANA:8
  • 乾酪:2
  • N/A: -

的代碼是在這裏 https://jsbin.com/yedusigara/1/edit?js,console

難道我做錯了什麼?有什麼辦法可以在一個功能中完成這一切嗎?

+0

@Tibrogargan你是對的謝謝你。但我的公式仍未見效 – Zorgg

+1

「*我需要保留鍵的順序*」 - 實際上鍵沒有順序。 – Bergi

+0

我真的不明白你想用「n/a」做什麼。你能縮短這個例子嗎?這樣會更清楚一點嗎?難以追蹤不匹配的東西 – Assimilater

回答

1

你的錯誤是沒有問題的顯示,但它是在小提琴,在這個部分:

$('.lol').each(function (i, elm) { 
similar_keys[i].forEach(function(spec, j){ 
    similar_keys[j].forEach(function (spec1, j1){ 
    if(spec[0] != spec1[0] && j != j1){ 
     similar_keys[i].push(['n/a', '--']); 
    } 
}); 

它沒有任何意義,通過similar_keys [J] 3號循環迭代。 j是內部數組的索引。這段代碼沒有意義。您甚至需要依靠DOM中的元素和數據中的對象具有相同數量的元素。

我只能猜測你想要完成什麼,但我會修改你原來的算法。也許這:

function similars(arr) { 
var similar_keys = []; 
for (var i = 0; i < arr.length; i++) { 
    var tempArr = []; 
    for (var key in arr[i]) { 
    var found = false; 
    var count = 0; 
    var index = 0; 
    for (var j = 0; j < arr.length; j++) { 
     if (arr[j].hasOwnProperty(key)) { 
     ++count; 
    } 
    if (i !== j && arr[j][key] === arr[i][key]) { 
    found = true; 
    break; 
    } 
    } 
    if (!found && count > 1) { 
     tempArr.push([key, arr[i][key]]); 
    } 
    else if (count > 1) { 
     tempArr.push(["N/A", arr[i][key]]); 
    } 
    } 
    similar_keys.push(tempArr); 
} 
return similar_keys; 

}

編輯: 還是不知道你在找什麼。我認爲你需要做的事:

1)按照第一個元素排序similar_keys中的每一行 2)比較每一行的第一個元素,並將N/A條目插入到排序順序最低的行。 3)繼續通過每一列,根據需要插入。

我會嘗試修改你的小提琴證明

編輯: 這應該工作。 https://jsbin.com/nesiqogebo/edit?js,console,output

+0

謝謝我添加了最後一部分的問題描述。但你的消化不見效。 這就是我得到的結果:[[['N/A「,1],[ ,[[「cheese」,3],[「carl」,「blue」]],[[「cheese」,2],[「ana」,8]]' – Zorgg

+0

是的,我不認爲我理解你的意圖很好。我想你想填充完成的數組。 –

+0

查看描述我只是更新它說我的目標是什麼。 – Zorgg