使用字符串替换将JS数组索引号转换为值

时间:2017-08-17 14:43:52

标签: javascript

我有一个多维数组:

(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);
    });
我做错了什么?替换是正确的方法吗?

5 个答案:

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