2016-01-25 62 views
0

我只是調用函數的參數值是一個對象,並檢查值是否可用到對象推入,這是值創建對象。如何推動對象中的鍵/值?

這是我的代碼: 調用函數在這裏:

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}); 
+0

我要像{「FIRST_NAME」輸出:「kaiushik」 ,「last_name」:「makwana」} –

+0

@OP,如果表單值不是用戶輸入的,它將是'''''而不是'undefined'。 – Rayon

回答

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'}); 

我希望這將有助於

3

的問題是,只一體if - else if - else條件運行。

所以,你不希望有一堆else if但分離if小號

1

刪除unnecessory的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' 
     }); 
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如果atruthy,其他人使用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); 
} 
相關問題