Учитывая следующую строку:
var str = "[,,1,2,,3,4,,,5,6]";
Я хочу заменить все "пустые" значения нулями. Другими словами, я хочу получить этот результат:
"[null,null,null,1,2,null,null,3,4,null,null,null,null,null,5,6]"
Это почти работает, но оно пропускает первое пустое значение:
var str = "[,,,1,2,,,3,4,,,,,,5,6]";
str.split(',').map(function(x) { return x ? x : 'null' }).join(',')
// Gives [,null,null,1,2,null,null,3,4,null,null,null,null,null,5,6]
Аналогичным образом, я заметил, что если у меня заканчиваются пустые значения, он тоже пропускает последний:
var str = "[,,,1,2,,,3,4,,,,,,5,6,,]";
str.split(',').map(function(x) { return x ? x : 'null' }).join(',')
// Gives [,null,null,1,2,null,null,3,4,null,null,null,null,null,5,6,null,]
Любые идеи, как я могу убедиться, что первые и последние пустые значения также заменены?
Спасибо!
Как уже упоминалось, [и] меняют ваше возвращение - это удаляет их и использует ту же функцию, что и существующая функция, но в сокращенной строке и возвращает правильное значение.
var str = "[,,,1,2,,,3,4,,,,,,5,6]";
let newStr = str.substring(1,str.length-1).split(',').map(function(x) { return x ? x : 'null' }).join(',')
console.log(newStr);
// Gives [null,null,null,1,2,null,null,3,4,null,null,null,null,null,5,6]
var str = "[,,,1,2,,,3,4,,,,,,5,6,,]";
newStr = str.substring(1,str.length-1).split(',').map(function(x) { return x ? x : 'null' }).join(',');
console.log(newStr);
// Gives null,null,null,1,2,null,null,3,4,null,null,null,null,null,5,6,null,null
это будет работать:
var str = "[,,,1,2,,,3,4,,,,,,5,6]";
var result = '[' + str.replace(/^\[|\]$/g, '').split(/[,]/).map(function(x) { return x ? x : 'null' }).join(',') + ']';
console.log(result);
var str = "[,,,1,2,,,3,4,,,,,,5,6]";
var a = '[${str.slice(1, -1).split(",").map(n => n || "null")}]'
console.log(a);
Секрет в том, что ваши скобки объединяются с запятыми/числами в начале и в конце строки, когда они разделены. Чтобы решить эту проблему, вам необходимо удалить скобки перед расщеплением.
Это можно сделать с помощью .replace()
on /[\][]/g
:
var str = "[,,,1,2,,,3,4,,,,,,5,6,]";
console.log(
str.replace(/[\][]/g, '').split(',').map(function(x) {
return x ? x : 'null'
}).join(',')
);
Вы удалили все пустые значения. "[" и "]" не являются ничем.
String.prototype.repEmptyWithNull =
function() {return this
.replace(/,,/g, ',null,')
.replace(/,,/g, ',null,')
.replace('[,', '[null,')
.replace(',]', ',null]')
}
console.log ("[,,,1,2,,,3,4,,,,,,5,6,]".repEmptyWithNull())
console.log ("[,,1,2,,,3,4,,,,,,5,6]".repEmptyWithNull())
console.log ("[,1,2,,,3,4,,,,,,5,6,,]".repEmptyWithNull())
console.log ("[,1,2,,,3,4,,,,,,5,6]".repEmptyWithNull())
console.log ("[1,2,,,3,4,,,,,,5,6,]".repEmptyWithNull())
console.log ("[1,2,,,3,4,,,,,,5,6]".repEmptyWithNull())