Javascript - 从对象中迭代和删除

Javascript - iterating and deleting from object

我有以下对象

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 },

我尝试了各种 for 和 do-while 循环,但似乎无法解决问题。

尝试:

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]--;
        }
    }
}

试试这个

    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;
            }
        }
    }
}

您可以雇用 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

我的解决方案:

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]--;
      }
    }

对于固定数组的顺序,你可以使用这个函数,如果达到数字,它会遍历数组和所需属性的键,并短路。

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>');

这很管用,但我这辈子都无法尝试准确命名该函数。

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);