在以下情况下,我假设可以将[{$sort: {"$_id": 1},
{$group: {
_id: "$match._id",
duplicateIds: {$push: "$_id"},
count: {$sum: 1}
}},
{$match: {
count: { $gt: 1 }
}}, {$addFields: {
deletableIds: { $slice: ["$duplicateIds", 1, 1000 ] }
}},
{$out: 'DeleteableIds'}]
(是一个字符串)的值修改为另一个字符串。这样,我可以模拟一个数组,只需编写this
即可删除字符串的第一个字符。但是,根据我的收集,这是不可变的。我不确定如果无法修改字符串的值,该如何解决该问题。我当然可以返回结果,但是然后我不得不写string_var.shift()
,它与同名数组函数的语法不同,最终会造成混淆。
string_var = string_var.shift()
答案 0 :(得分:0)
您不能修改this
,因为它是关键字,而不是变量。就像function
或class
您可以将该值分配给另一个变量:
var self = this.substr(1)
代替
还要注意,this
上下文是此时的内部函数。
答案 1 :(得分:0)
以下代码无法正常工作的原因有两个。 this
不是变量,它是执行上下文(全局,函数或eval)的属性,在非严格模式下,该上下文始终是对对象的引用,在严格模式下可以是任何值。给它分配任何东西在语法上都是无效的。
但是更重要的是,不可能在String接口上实现一种突变方法,因为根据ECMAScript规范,字符串,布尔值和数字在Javscript中都是不可变的。当您“突变”某个值时(例如在上下文x += 5
中),您将在幕后创建一个新值,而不修改原始值。
答案 2 :(得分:0)
好吧,您可以对它进行一些操作后返回值
String.prototype.shift = function() {
return this.slice(1);
};
var a = "abcdef";
console.log(a);
a = a.shift();
console.log(a);
注意: 修改语言本身的原型被认为是不好的做法