3

私のコードが近づいているかどうかを知りたいのですが、次のことをしたいです:

  1. オブジェクトが存在するかどうかを確認する
  2. 存在しない場合は、作成してプロパティを割り当てます
  3. すでに存在する場合は、プロパティを割り当てるだけです

私が今持っているのは次のコードですが、同じ行を2回書くのは好きではありません

function doSomething(_whatever){
    if(typeof someobject === "undefined"){
        someobject = { //dont exist
            profile : "some value",
            status : []
        }

        someobject.status.push(_whatever);
    }else{
        someobject.status.push(_whatever); //because already exist
    }
}

このスニペットを書くより良い方法は何ですか? それとも、より良く、より少ない反復でそれを行いますか?

前もって感謝します

------ オリジナル機能

function addPerson(_person){
    var people = Iee.dashboard.analytics.data.people.data;      
    if(typeof people[_person.Id_Emp] === "undefined"){
        people[_person.Id_Emp] = {
            profile : _person,
            status : []
        }

        people[_person.Id_Emp].status.push({Id_Emp : _person.Id_Emp, status : _person.Estatus1, estatusby : _person.Centro_de_trabajo});
    }else{
        people[_person.Id_Emp].status.push({Id_Emp : _person.Id_Emp, status : _person.Estatus1, estatusby : _person.Centro_de_trabajo});
    }

    addBlackList(_person);
}
4

3 に答える 3

4

これを行う一般的な方法は、冗長チェックです。

someobject = someobject || {
    project:"some value",
    status:[]
};
于 2013-04-11T20:10:11.133 に答える
1

この場合、オブジェクトまたは undefined のいずれかであると予想されますが、文字列や数値などではないため、真の値を持っているかどうかを確認できます。

function addPerson(_person) {
    var people = Iee.dashboard.analytics.data.people.data,
        person = people[_person.Id_Emp];

    if (!person) person = {
        profile: _person,
        status: []
    };
    person.status.push({
        Id_Emp: _person.Id_Emp, 
        status: _person.Estatus1, 
        estatusby: _person.Centro_de_trabajo
    });

    addBlackList(_person);
}

(真実の)値がまだ存在しない場合にのみ変数に値を割り当てるため、これは他の回答で言及されている冗長チェックよりもわずかに優れたパフォーマンスを発揮するはずです。

楽しみのために、ここに非常に凝縮されたバージョンがあります:

function addPerson(_person) {
    var people = Iee.dashboard.analytics.data.people.data, id = _person.Id_Emp;

    (people[id] || { profile: _person, status: [] }).status.push({
        Id_Emp: id, status: _person.Estatus1, estatusby: _person.Centro_de_trabajo
    });
    addBlackList(_person);
}
于 2013-04-11T20:22:09.370 に答える