鉴于以下内容:
var arr = [
"one,two,three",
"four,five,six,seven",
"eight,nine,ten",
"11,12,13,14"
];
从阵列中的每个元素中删除第二个单词的最佳方法是什么?所需的数组输出为:
arr = [
"one,three",
"four,six,seven",
"eight,ten",
"11,13,14"
];
我觉得最合乎逻辑的方法是使用for循环遍历数组并从每个元素中删除索引1,如下所示:
for(var i=0; i < arr.length; i++) {
i.splice(1,1).join(';');
}
(在循环中,我也试过arr[i].splice(1,1).join(';');
)---但两种方法都没有返回所需的结果。我做错了什么,以及最有效的方法是什么?
答案 0 :(得分:4)
您需要先拆分数组,然后删除该元素。
var arr = [
"one,two,three",
"four,five,six,seven",
"eight,nine,ten",
"11,12,13,14"
];
for (var i = 0; i < arr.length; i++) {
// split the string based on ,
var a = arr[i].split(',');
// remove second element from string
a.splice(1, 1);
// join the updated string array
arr[i] = a.join();
}
console.log(arr);
&#13;
使用String#indexOf
和String#slice
方法的其他方法。
var arr = [
"one,two,three",
"four,five,six,seven",
"eight,nine,ten",
"11,12,13,14"
];
for (var i = 0; i < arr.length; i++) {
// get the index of first ,
var index = arr[i].indexOf(','),
// get the index of second index
index1 = arr[i].indexOf(',', index + 1);
// generate the string based on index
arr[i] = arr[i].slice(0, index) + arr[i].slice(index1);
}
console.log(arr);
&#13;
答案 1 :(得分:0)
您可以对字符串使用正则表达式,该字符串查找逗号,任何字符,非gready和另一个逗号,但不包括在内以替换。
var arr = ["one,two,three", "four,five,six,seven", "eight,nine,ten", "11,12,13,14"];
arr = arr.map(function (a) {
return a.replace(/,.*?(?=,)/, '');
});
console.log(arr);
答案 2 :(得分:0)
首先,你必须在数组中破坏你的字符串,所以:
elements = arr[i].split(',');
然后你拼接第二个元素并加入字符串:
elements.splice(1,1)
result = elements.join(',');
最后你用新的字符串替换字符串:
arrs[i] = result
总结:
for(var i=0; i<arr.length; i++){
elements = arrs[i].split(',');
elements.splice(1,1);
arrs[i] = elements.join(',');
}
玩得开心!
答案 3 :(得分:0)
Array.prototype.splice
函数返回已删除的项目。
您需要存储数组,删除项目,最后返回数组。
var arr = [
"one,two,three",
"four,five,six,seven",
"eight,nine,ten",
"11,12,13,14"
];
function spliceWords(arr, pos, length) {
length = length || 1; // Default number to remove is 1.
return arr.map(function(item) {
var words = item.split(',');
words.splice(pos, length); // Splice removes the items in-place.
return words.join(',');
});
}
var arr2 = spliceWords(arr, 1);
document.body.innerHTML = JSON.stringify(arr2, null, 4);
body { font-family:monospace; white-space:pre; }
答案 4 :(得分:0)
你走了:
arr.map(x => x.replace(x.match(/,[^,]*/),""))
或
arr.map(function(x) x.replace(x.match(/,[^,]*/),""))
结果:
["one,three", "four,six,seven", "eight,ten", "11,13,14"]
正则表达式查找第一个逗号(,
)并抓取后面的所有内容 not 逗号([^,]*
)。字符串的这一部分将被替换为任何内容(""
)。
map
方法将此函数应用于数组的每个元素。
答案 5 :(得分:0)
您可以使用.map()
更改数组的每个项目,并使用.replace()
从字符串中删除第二个值。
var arr = [
"one,two,three",
"four,five,six,seven",
"eight,nine,ten",
"11,12,13,14"
];
arr = arr.map(function(val){
return val.replace(/([\w]+),[\w]+,(.*)/, "$1,$2");
});
console.log(arr);
&#13;
答案 6 :(得分:0)
以下是算法:
for(var i=0; i < arr.length; i++) {
var a = arr[i].split(",");
a.splice(1,1);
arr[i] = a.join();
}