JavaScript将包含空值的数组插入字符串

3

有没有一种方法可以在将null连接到字符串时显示null元素?

var arr = [];
arr.push('x');
arr.push(null);
arr.push('z');

// arr = ['x', null, 'z']

var samp = 'Array elements are: ' + arr;

// Array elements are: 'x',,'z'

我需要的输出结果:

Array elements are: 'x', null,'z'

你只能连接字符串。因此,如果它为null,请检查null,将其创建为字符串“null”,然后进行连接。null是对象的一种类型,因此您可以执行JSON.stringify(null),它将被转换为字符串。 - Sivakumar Tadisetti
@JavascriptLover-SKT - 我试图避免将“null”(作为字符串)插入到字符串中,因为我还需要在SQL查询中使用它,其中查询可以插入实际字符串和实际空值。 - DayIsGreen
4个回答

10

你可以使用 Array.mapString 应用于参数。它非常简洁:

arr.map(String)

var arr = [];
arr.push('x');
arr.push(null);
arr.push('z');

var samp = 'Array elements are: ' + arr.map(String);
console.log(samp);


0
将数组隐式强制转换为字符串会调用.join方法,并且:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join

如果一个元素未定义或为空,它将被转换为空字符串。
因此,您不能使用隐式强制转换或.join。一种选择是使用reduce手动连接每个元素(以便不跳过null):

var arr = [];
arr.push('x');
arr.push(null);
arr.push('z');


const joined = arr.reduce((a, elm) => a + (a ? ',' : '') + elm);

var samp = 'Array elements are: ' + joined;
console.log(samp);

如果您也希望每个字符串周围有引号,就像您的一样。
Array elements are: 'x', null,'z'

然后在连接之前检查每个元素的typeof

var arr = [];
arr.push('x');
arr.push(null);
arr.push('z');


const joined = arr.reduce((a, elm) => {
  const quote = typeof elm === 'string' ? "'" : '';
  return a + quote + (a ? ',' : '') + elm + quote;
}, '');

var samp = 'Array elements are: ' + joined;
console.log(samp);

(如果元素本身包含任何单引号,您可能也想将它们替换为\'


0

JSON.stringify 知道如何以字符串形式表示内容。如果您只是将数组转换为字符串,您几乎可以得到想要的结果:

JSON.stringify(arr)
# => ["x",null,"z"]

但是如果你自己做,就可以避免使用方括号,并多留一些空间...

arr.map(JSON.stringify).join(', ')
# => "x", null, "z"

0

这是一个不同寻常但有趣的需求。容易的部分是你想在最终字符串中显示 null。所以,这是我尝试过的:

function arrToStr(inputArr){ //this func will return str with null
var str=undefined;
inputArr.map(function(i){str = (str!==undefined) ? (str+", "+i) : i})
return str;
}

var arr = [];
arr.push('x');
arr.push(null);
arr.push('z');

var samp = 'Array elements are: ' + arrToStr(arr);
//samp - "Array elements are: x, null, z"

希望你明白了这里的要点?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接