如何在对象中按键/值?

时间:2016-01-25 07:11:36

标签: javascript

我只是调用带有参数值的函数是一个对象,并检查对象是否可以将值推入创建的对象中。

这是我的代码: 在这里调用函数:

profile({"first_name":'kaushik', "last_name":'makwana'});

在此声明功能:

function profile(profileInfo){
    profileInfo = JSON.stringify(profileInfo);
    var profileData  = JSON.parse(profileInfo);
    var first_name   = profileData.first_name;
    var last_name    = profileData.last_name;
    var email        = profileData.email;
    var message      = profileData.message;

    var data = {};
    if(typeof first_name != 'undefined'){
        data['first_name'] = first_name;
    }
    else if(typeof last_name != 'undefined'){
        data['last_name'] = last_name;
    }
    else if(typeof email != 'undefined'){
        data['email'] = email;

    }
    else if(typeof message != 'undefined'){
        data['message'] = message;

    }
    console.log(data);
 }

显示如下:

  Object({"first_name" : kaushik});

4 个答案:

答案 0 :(得分:3)

问题是只运行了一个if - else if - else条件体。

所以你不想拥有一堆else if但是分开if

答案 1 :(得分:3)

问题是你正在使用if和else if

所以一次

if(typeof first_name != 'undefined'){
        data['first_name'] = first_name;
    }

这种情况是真的,它会忽略其他条件。 所以像

一样使用它
function profile(profileInfo){
    profileInfo = JSON.stringify(profileInfo);
    var profileData  = JSON.parse(profileInfo);
    var first_name   = profileData.first_name;
    var last_name    = profileData.last_name;
    var email        = profileData.email;
    var message      = profileData.message;

    var data = {};

    if(typeof first_name != 'undefined'){
        data['first_name'] = first_name;
    }
    if(typeof last_name != 'undefined'){
        data['last_name'] = last_name;
    }
    if(typeof email != 'undefined'){
        data['email'] = email;

    }
    if(typeof message != 'undefined'){
        data['message'] = message;

    }
    console.log(data);
 }
profile({"first_name":'kaushik', "last_name":'makwana'});

我希望它会有所帮助

答案 2 :(得分:2)

profileInfo = JSON.stringify(profileInfo);
var profileData  = JSON.parse(profileInfo);

这完全是无用的和多余的。为什么JSON编码再对其进行解码?它在这里没有任何用处。

var first_name   = profileData.first_name;

这也是多余的。为什么要将每个属性分配给单个变量?您可以直接使用该物业。

if(typeof first_name != 'undefined')

这是可疑的,取决于您期望什么是有效值。如果您接受0作为有效的名字,那么您确实需要检查undefined。但是,如果应拒绝任何 falsey 值,请检查== false。 Javascript中的典型习语是:

a = a || b;

如果a truthy ,这会保留a,否则会使用b

我建议:

function profile(profileInfo) {
    var data = {
        first_name: profileInfo.first_name || null,
        last_name: profileInfo.last_name || null,
        email: profileInfo.email || null,
        message: profileInfo.message || null,
    };
    console.log(data);
}

请注意,这意味着data将始终拥有所有属性,与您现在所做的相反。但是真的,在做什么?!您只是重新创建同一个对象。这段代码基本上做了同样的事情:

function profile(profileInfo) {
    var data = profileInfo;
    console.log(data);
}

如果您对克隆对象感兴趣以打破对原始文件的任何引用,请参阅What is the most efficient way to deep clone an object in JavaScript?。但这似乎并不一定是你真正需要的。

如果您想将profileInfo过滤到某个已定义的子集(即您要删除除了一些预期属性之外的所有属性):

function profile(profileInfo) {
    var data = {};
    for (var prop in profileInfo) {
        if (['first_name', 'last_name', 'email', 'message'].indexOf(prop) > -1) {
            data[prop] = profileInfo[prop];
        }
    }
    console.log(data);
}

答案 3 :(得分:1)

删除不必要的if-else。

function profile(profileInfo) {

            profileInfo = JSON.stringify(profileInfo);
            var profileData = JSON.parse(profileInfo);
            var first_name = profileData.first_name;
            var last_name = profileData.last_name;
            var email = profileData.email;
            var message = profileData.message;

            var data = {};

            if (typeof first_name != 'undefined') {
                data['first_name'] = first_name;
            } 
            if (typeof last_name != 'undefined') {
                data['last_name'] = last_name;
            }  
            if (typeof email != 'undefined') {
                data['email'] = email;

            } 
           if (typeof message != 'undefined') {
                data['message'] = message;

            }
            console.log(data);
        }

如果您有阵列,那么您也可以这样做。

var data = [];
        function profile(profileInfo) { 

             data.push(profileInfo);

             console.log(data);
        }


        profile({
            "first_name": 'kaushik',
            "last_name": 'makwana'
        });

        profile({
            "first_name": 'kaushik111',
            "last_name": 'makwana111'
        });