我有一个对象
的数组
,
var out = [{
"type": "1",
"from": "13052033555",
"to": "4444444",
"amount": "40000",
"date": 1461575799,
"status": "1"
}, {
"type": "2",
"from": "13052033555",
"to": "1111111",
"amount": "30000",
"date": 1461575884,
"status": "1"
}...
];
我只得到它的值,没有键
现在我使用这个函数从数组中获取值,如下所示, 我传递数组,然后它只返回没有键的值
function foo(a) {
var values = [];
for (var i = 0; i < a.length; i++) {
var obj = a[i];
var arr = Object.keys(obj).map(function(k) {
return obj[k]
});
values.push("[" + arr + "],");
}
return values.join('');
}
然后它返回没有像这样的键的值数据,
["1","13052033555","4444444","40000",1461575799,"1"],
["2","13052033555","1111111","30000",1461575884,"1"],
我的问题是如何循环遍历这些值并仅将方法应用于每个数据数组的第 5 个值?
最佳答案
在 foo
中您所要做的就是在继续循环之前调用 arr[4]
上的 fn
。
arr[4] = fn(arr[4])
这是当然的,假设您出于任何原因不需要在事后这样做。如果是这种情况,您可以像原始代码一样使用另一个 for 循环
,只需按照上面指定的方式修改每个数组中的第 5 个元素,只不过它看起来更像
for (var i = 0; i < outerArray.length; i++) {
outerArray[i][4] = fn(outerArray[i][4])
}
现在我们已经介绍了如何使用当前代码执行此操作,我还建议您不要对任何实际应用程序执行此操作。如果要修改对象列表的特定对象属性上的数据,则应该使用对象属性名称(键)来执行此操作,而不是稍后使用索引来修改值数组。这可以防止由于对象没有保证顺序而可能引起的任何困惑。下面是我如何执行此操作的示例,假设您要修改日期
:
function foo(a) {
return a.map(function(obj) {
return Object.keys(obj).map(function(k) {
return k === 'date' ? fn(obj[k]) : obj[k]
})
})
}
这样您就可以定位所需的属性,但也不会修改原始对象。
注意您应该将 fn
替换为您想要的函数:)
编辑根据您的请求,您可以通过以下方式扩展它以检查其他属性名称
function foo(a) {
return a.map(function(obj) {
var values = []
Object.keys(obj).forEach(function(k) {
if (k === 'date') {
values.push(fn(obj[k]))
} else if (k !== 'type') {
values.push(obj[k])
}
})
return values
})
}
关于Javascript,循环数组并应用其他函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38075525/