2017-08-17 36 views
3

我有一個多維陣列:JS數組索引號爲值與字符串替換

(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')"] 

我想使用替換,但我得到的替換不是一個函數錯誤。

array.forEach(function(item, index) { 
    return item.toString().replace('idDocDetail', index); 
    }); 

我在做什麼錯?替換是正確的方法來做到這一點?

回答

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)))

+0

謝謝你,我使用prototype.map從表中提取信息到該數組,但我被卡住的索引替換。再次感謝! – Absolutkarlos

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);

+0

第二行仍然有字符串「idDocDetail」 – smarber

0

無法通過調用項目的方法替換項目所取代。相反,你需要在數組上調用它。你可以這樣做:

for (var i=0; i<array.length; i++) { 
    array[i][0] = i; 
} 
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)

+0

你也失去了嵌入式陣列 – smarber

+0

啊剛纔注意到,現在 - 編輯我的職務。 –

+0

第二行仍然有我想用索引替換的字符串 – Absolutkarlos

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);

+1

第二行仍然有我想用索引替換的字符串 – Absolutkarlos

+0

@Absolutkarlos固定! thx – smarber