如何使用循环更改this.something的值

时间:2015-02-10 14:28:50

标签: javascript node.js

    if (this.name === '') {
        this.name= 'None';
    }
    if (this.obs === '') {
        this.obs = 'None';
    }

伙计们,我怎么能干掉这段代码?我这样想:

var v = [this.name, this.obs];

for(var i = 0; i < v.length; i++) {
   if(v[i] === '') {
       v[i] = 'None';
   } 
};

但根本不工作......

4 个答案:

答案 0 :(得分:5)

我认为你要找的是一个功能。 像这样的东西

function setToNoneIfEmpty (stringInput) {
    if (stringInput === '') {
        stringInput = 'none';
    }
    return stringInput;
}

要使这个更干净,你应该使用三元语句并只返回值而不是重新分配参数,所以函数看起来像这样

function setToNoneIfEmpty (stringInput) {
    return stringinput === '' ? 'None' : stringinput;
}

使用此功能,您应该能够传递this.namethis.obs,并且该功能会相应地更改它们。你会这样称呼他们

this.name = setToNoneIfEmpty(this.name);
this.obs = setToNoneIfEmpty(this.obs);

您的原始代码无法正常工作,因为您创建了一个多维数组,然后没有将这些值作为多维数组访问。

我建议的方式会更好,更容易阅读


我不是Javascript的Pro(通过远景),但是有人向我提到它可以以不同的方式完成,您将实际访问该对象并传入您要检查的对象属性。

function setToNoneIfEmpty(obj, name) {
    if (obj[name] === '') { 
        obj[name] = 'None'; 
    } 
}

因此,我们不是传入一个变量来返回一个字符串,而是传入一个对象和属性名称,这使得代码甚至是DRY-er,就像我们在使用它时所看到的那样

setToNoneIfEmpty(this, 'name')
setToNoneIfEmpty(this, 'obs')

答案 1 :(得分:3)

请记住,我们不仅可以像object.property那样访问对象的属性,还可以通过下标运算符object['property']访问对象的属性。因此,我们可以遍历我们想要更改的属性的所有名称:

var propertyNames = ['name', 'obs'];

for(var i = 0; i < propertyNames.length; i++) {
    if(this[propertyNames[i]] === '') {
       this[propertyNames[i]] = 'None';
   } 
};

使用Array.forEach,代码变得更简单:

['name', 'obs'].forEach(function (key) {
    if (this[key] === '') {
        this[key] = 'None';
    }
});

答案 2 :(得分:0)

使用for..in循环和OR运算符。

for(var key in this)
   this[key] = this[key] || 'None';

for..in循环遍历thisthis[key]的可枚举属性,如果它不是'',则会将其分配给自身。如果是'',则会为'None'分配'',因为{{1}}被视为 falsey

答案 3 :(得分:-1)

试试这个:

var v = [this.name, this.obs];

v.forEach(function(elem){
    if(!elem) elem = 'NONE';
})