Замена пустых значений на нули в строке JavaScript

1

Учитывая следующую строку:

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,]

Любые идеи, как я могу убедиться, что первые и последние пустые значения также заменены?

Спасибо!

  • 0
    Удалить [] и проверить
  • 0
    все работает, как и ожидалось, вы действительно удалили все пустые значения, если просто используете str.split (','). map (function (x) {return x? x: 'null'})
Теги:

6 ответов

1
Лучший ответ

Как уже упоминалось, [и] меняют ваше возвращение - это удаляет их и использует ту же функцию, что и существующая функция, но в сокращенной строке и возвращает правильное значение.

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
  • 0
    Ааа, это имеет смысл. Doh! Спасибо!
1

это будет работать:

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

var str = "[,,,1,2,,,3,4,,,,,,5,6]";
var a = '[${str.slice(1, -1).split(",").map(n => n || "null")}]'
  
console.log(a);
1

Секрет в том, что ваши скобки объединяются с запятыми/числами в начале и в конце строки, когда они разделены. Чтобы решить эту проблему, вам необходимо удалить скобки перед расщеплением.

Это можно сделать с помощью .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(',')
);
0

Вы удалили все пустые значения. "[" и "]" не являются ничем.

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню