【发布时间】:2021-05-28 02:41:11
【问题描述】:
我会直奔主题的。
我想更改以下数组中特定 ID 和 dataID 的半径值:
var data = [{
ID: 0,
type: 'circle',
Name: 'Tom',
MoreData: [{
dataID: 123,
dimData: {
radius: 25,
var: 15
}
}, {
dataID: 345,
dimData: {
radius: 35,
var: 65
}
}]
}, {
ID: 1,
type: 'circle',
Name: 'Mat',
MoreData: [{
dataID: 678,
dimData: {
radius: 40,
var: 30
}
}, {
dataID: 91011,
dimData: {
radius: 50,
var: 50
}
}]
}];
我目前的解决方案:
var data = [{
ID: 0,
type: 'circle',
Name: 'Tom',
MoreData: [{
dataID: 123,
dimData: {
radius: 25,
var: 15
}
}, {
dataID: 345,
dimData: {
radius: 35,
var: 65
}
}]
}, {
ID: 1,
type: 'circle',
Name: 'Mat',
MoreData: [{
dataID: 678,
dimData: {
radius: 40,
var: 30
}
}, {
dataID: 91011,
dimData: {
radius: 50,
var: 50
}
}]
}];
var doSomething = function(array, IDVal, dataIDVal, RadiusVal) {
//Search array for ID and then dataID and then set the value of that dataID's Radius to RadiusVal
for (var i = 0; i < array.length; i++) {
if (array[i].ID == IDVal) {
for (var j = 0; j < array[i].MoreData.length; j++) {
if (array[i].MoreData[j].dataID == dataIDVal) {
console.log('Radius Before: ' + array[i].MoreData[j].dimData.radius);
array[i].MoreData[j].dimData.radius = 20000;
console.log('Radius After: ' + array[i].MoreData[j].dimData.radius);
}
}
}
}
}
doSomething(data, 0, 345, 100);
console.log(data[0]);
我想先搜索正确的ID,然后获取正确的dataID来改变dimData.Radius。
有没有更有效的方法来做到这一点?不用说,数据数组可能非常大,而且 MoreData 数组还包含更多值(dimData 也是如此)。我想知道是否有更快的方法来实现上述结果。
编辑:要回答几个问题,唯一可以保证的是 ID 值始终是结构化的,因此它每次都会递增 1,但我不相信数据会以其他方式排序.但是,如果数据集也已排序,我将不胜感激。
编辑 2: 尝试了一个使用 .filter 的解决方案,但结果是几个函数相互嵌套,看起来很混乱。
如果有人想要该解决方案,请点击此处:How do I pass an extra parameter to the callback function in Javascript .filter() method?
如果代码片段不起作用,请在 JS Fiddle 上链接(我是新手): https://jsfiddle.net/53pa2xst/
【问题讨论】:
-
Javascript 与 Java 无关。
-
数据是否完全排序?
标签: javascript arrays performance multidimensional-array key-value