我有一个多维数组:
(3) [Array(1), Array(1), Array(1)]
0:["('idDocDetail','0','$createdBy')"]
1:["('idDocDetail','2','$createdBy'),('idDocDetail','4','$createdBy')"]
2:["('idDocDetail','0','$createdBy')"]
我需要用索引号替换字符串值 idDocDetail ,就像这样。
(3) [Array(1), Array(1), Array(1)]
0:["('0','0','$createdBy')"]
1:["('1','2','$createdBy'),('1','4','$createdBy')"]
2:["('2','0','$createdBy')"]
我正在尝试使用replace,但我得到的替换不是函数错误。
array.forEach(function(item, index) {
return item.toString().replace('idDocDetail', index);
});
我做错了什么?替换是正确的方法吗?
答案 0 :(得分:1)
这里,这适用于您的代码结构。它使用map()
生成一个新数组,只需用索引替换感兴趣的字符串。
编辑:为了清晰+正则表达式添加了一个嵌套地图,以便在字符串中找到“idDocDetail”的所有实例,而不仅仅是第一个。给定原始replace
值时,string
方法仅处理发生的字符串的第一个实例。
const array = [["('idDocDetail','0','$createdBy')"],
["('idDocDetail','2','$createdBy'),('idDocDetail','4','$createdBy')"],
["('idDocDetail','0','$createdBy')"]]
var find = 'idDocDetail';
var re = new RegExp(find, 'g');
let newArray = array.map((val, i) => val.map(string => {
return string.replace(re, i)
}))
console.log(newArray)
答案 1 :(得分:1)
您可以遍历数组并进行编辑。
let array = [
["('idDocDetail','0','$createdBy')"],
["('idDocDetail','2','$createdBy'),('idDocDetail','4','$createdBy')"],
["('idDocDetail','0','$createdBy')"],
];
array.forEach((e, i) => {
array[i] = [e[0].replace(/idDocDetail/g, i)];
});
console.log(array);
答案 2 :(得分:1)
我建议您学习以不可变的方式进行更改。这是Array.prototype.map
播放良好的地方
const data = [
["('idDocDetail','0','$createdBy')"],
["('idDocDetail','2','$createdBy'),('idDocDetail','4','$createdBy')"],
["('idDocDetail','0','$createdBy')"]
]
const modified = data.map((item, index) =>
item.map(str => str.replace(/idDocDetail/g, index ))
)
modified.forEach(x => console.log(JSON.stringify(x)))

答案 3 :(得分:0)
forEach
忽略回调的返回。您需要在当前索引处分配给原始数组。
var array = [
["('idDocDetail','0','$createdBy')"],
["('idDocDetail','2','$createdBy'),('idDocDetail','4','$createdBy')"],
["('idDocDetail','0','$createdBy')"]
];
array.forEach(function(item, index) {
array[index] = item.map(s => s.replace('idDocDetail', index));
});
console.log(array);
答案 4 :(得分:0)
您无法通过调用要替换的项目上的方法来替换项目。相反,你需要在阵列上调用它。你可以这样做:
for (var i=0; i<array.length; i++) {
array[i][0] = i;
}