2016-04-26 96 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);