我只是调用带有参数值的函数是一个对象,并检查对象是否可以将值推入创建的对象中。
这是我的代码: 在这里调用函数:
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 :(得分: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'
});