JavaScript中如何从字符串中移除"null"?

3

我有这段代码:

var returnValue = item.fname + " " + item.mname + " " + item.lname
returnValue.replace(null," ");
return returnValue ;

有时一个字段是空的,所以returnValue会是: "John null Doe" 或者 "John something null" 我想要去掉"null",但我的代码似乎不起作用。
有人能帮我解决吗?

4
returnValue 中的 null 对象替换为字符串形式的 null - JustCarty
3
不要在之后删除空值,而是在字段中添加检查,只有当它们不为空时才将它们添加,以避免出现问题。否则,如果有人的名字为“Joe Nullmann”,会发生什么情况? - Rence
@Sirence 他将变成“Joe Mann”,最终可能会从他的名字中获得价值。 - D.Schaller
7个回答

4
不要事后替换null,只有在个别名称不为null时才添加。
var returnValue = "";

if (item.fname !== null) {
    returnValue += item.fname + " ";
}

if (item.mname !== null) {
    returnValue += item.mname + " ";
}

if (item.lname !== null) {
    returnValue += item.lname;
}

return returnValue;

或者使用 Array.prototype.filter 来删除 null 值:

// store the names in an array
var names = [ item.fname, item.mname, item.lname ];

// filter the array to values where they are `!== null`
var notNullNames = names.filter(x => x !== null);

// join them with spaces
var returnValue = notNullNames.join(" ");

1
var returnValue = (item.fname || " ") + " " + (item.mname || " ") + " " + (item.lname || " ");
return returnValue;

在混合使用变量类型时要小心(例如字符串和null)。最好确保变量已设置或具有备用选项。


1
我建议您使用另一种技术:将字符串部分放入数组中,进行过滤并将其连接起来:
[item.fname, item.mname, item.lname].filter(v => !!v).join(' ')

2
你可以使用 Boolean 作为 cb 进行过滤。 - Nina Scholz
@NinaScholz 不建议这样做,因为过滤器回调函数接收3个参数:当前元素、索引和数组,而 Boolean 只接受一个参数。 - Eugene Tsakh
“不建议这样做” - 为什么?Boolean()将会忽略额外的参数。 - Andreas
@Andreas 这就是 JS 的问题,这也是为什么大公司正在使用 Flow 和 TypeScript 的原因。这是 API 的误用。如果它只接受一个参数,那么你应该只传递一个参数。 - Eugene Tsakh
但是您仅使用一个参数。 - Nina Scholz

0
var returnValue = item.fname

if(item.mname)returnValue  += " " + item.mname

 if(item.lname)returnValue  += " " + item.lname

return returnValue 

谢谢您提供这段代码片段,它可能会在某种程度上提供一些有限的、即时的帮助。但是,如果能够提供一个[适当的解释] (//meta.stackexchange.com/q/114762/206345),说明为什么这是一个好的解决方案,那么它的长期价值将会大大提高,更有用于未来读者遇到类似问题时参考。请 [编辑] 您的回答,添加一些解释,包括您做出的假设。 - Blue

0

试一下这个

>    return (item.fname ? item.fname : '')  + " " + (item.mname ? item.mname : '') + " " + (item.lname ? item.lname : '');

这个对我有用。谢谢 - hacking_mike

0
在我看来,最优雅的解决方案是:
[item.fname, item.lname, item.lname].join(' ');

例如:

const item = {}
item.fname = 'foo'
item.lname = 'bar'

console.log([item.fname, item.mname, item.lname].join(' '))

否则,您可以使用或运算符跳过假对象:

const item = {}
item.fname = 'foo'
item.lname = 'bar'

const joined = (item.fname || '') + " " + (item.mname || '') + " " + (item.lname || '')

console.log(joined)


0

尝试使用三元运算符来避免空值:

var returnValue = item.fname + " " + item.mname ? item.mname : "" + " " + item.lname

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