2016-04-26 99 views
0

刪除,我有以下對象使用Javascript - 迭代和對象

familyData: [ 
        { man: 1, woman:10, daughter:6, son:3 }, 
        { man: 4 woman:5, daughter:5, son:2 }, 
        { man: 1, woman:1, daughter:1, son:1 }, 
        { man: 1, woman:1, daughter:1, son:1 }, 
        { man: 1, woman:1, daughter:1, son:1 }, 
        ], 

我所試圖做的是從每個索引中刪除1,減法但是數量是用戶提交的。

讓我解釋...

如果用戶插入一個2 1將從第一2個索引在對象

{ man: 0, woman: 9, daughter:6, son:3 }, 
{ man: 3 woman:4, daughter:5, son:2 }, 

如果用戶插入4.帶走1將從第一4項指標中的對象

{ man: 0, woman: 9, daughter:5, son:2 }, 
{ man: 3 woman:4, daughter:4, son:1 }, 

帶走我已經嘗試了各種用於和do-while循環,但似乎無法釘它。

+0

即使他們失敗了,請告訴我們您的嘗試。 – zer00ne

+1

一個JavaScript對象沒有無序的「順序」屬性。您想如何分配項目以從中刪除值? – Jamiec

+0

它是否爲零?它是否應用於數組的所有元素? –

回答

0

嘗試:

var indexes = 0; 
for (var i=0; i<familyData.length; ++i) { 
    for (var key in familyData[i]) { 
     if (++indexes < 4 && familyData[i][key]) { 
      familyData[i][key]--; 
     } 
    } 
} 
+0

我喜歡這個答案,主要是因爲它是最直接的。感謝大家的回覆。 – LeBlaireau

0

試試這個

var input = ..... user input; 

    if(input>0){ 
    for(var i=0; i<familyData.length; i++){ 
     var item = familyData[i]; 
     var counter=0; 
     for(prop in item) 
     { 
      item[prop]=item[prop]-1; 
      counter++; 
      if(counter==input) 
      { 
       break; 
      } 
     } 
    } 
} 
-1

您可以使用Array.slice,Array.map和Array.concat

var num = 2 
familyData.slice(0,num).map(function(members) { 
    for(var name in members) { 
    members[name]-- 
    } 
    return members 
}).concat(familyData.slice(num)) 

活生生的例子:https://tonicdev.com/lipp/family

+0

是啊,我已經刪除了 –

0

我的解決方案:

var userValue = 4; 
    for (var i = 0; i < familyData.length; i++) { 
     var counter = userValue; 
     for (var x in familyData[i]) { 
     if (!counter--) break; 
     familyData[i][x]--; 
     } 
    } 
0

隨着固定陣列的順序,則可以使用該功能,如果達到其在陣列並在具有短路的有用性質的鍵迭代的數目。

function decrement(n) { 
 
    familyData.forEach(function (a) { 
 
     order.every(function (k, i) { 
 
      if (i < n) { 
 
       a[k]--; 
 
       return true; 
 
      } 
 
     }); 
 
    }); 
 
} 
 

 
var familyData = [{ man: 1, woman: 10, daughter: 6, son: 3 }, { man: 4, woman: 5, daughter: 5, son: 2 }, { man: 1, woman: 1, daughter: 1, son: 1 }, { man: 1, woman: 1, daughter: 1, son: 1 }, { man: 1, woman: 1, daughter: 1, son: 1 }], 
 
    order = ['man', 'woman', 'daughter', 'son']; 
 

 
decrement(3); 
 
document.write('<pre>' + JSON.stringify(familyData, 0, 4) + '</pre>');

0

這確實的伎倆,不能爲我的生活嘗試,雖然功能準確名稱。

function soAnswer(index, arr) { 
    var keys = Object.keys(arr[0]); 

    if (index >= keys.length || index < 0) { 
    throw new Error('soAnswer was given an invalid index for given array'); 
    } 

    keys = keys.slice(0, index); 

    return arr.map(function (v) { 
    keys.forEach(function (vv) { 
     v[vv] -= 1; 
    }); 

    return v; 
    }); 
} 

var outcome = soAnswer(3, familyData);