我有以下对象
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,将从对象的前两个索引中删除
{ 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循环,但似乎无法确定它。
答案 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]--;
}
}
}
答案 1 :(得分: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;
}
}
}
}
答案 2 :(得分: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]--;
}
}
答案 3 :(得分: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>');
&#13;
答案 4 :(得分: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);
答案 5 :(得分:-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))