Javascript 我的对象是否返回隐藏的';空';价值
我的代码似乎返回一个未在对象中显式声明的空值 我试图编写的是一个代码,它将遍历一个对象数组,找到哪个值为null,然后添加一个'question'键,使其等于“Hi,请提供您的'key'。”最后,我想返回带有question键的对象数组 请参阅下面的代码:Javascript 我的对象是否返回隐藏的';空';价值,javascript,Javascript,我的代码似乎返回一个未在对象中显式声明的空值 我试图编写的是一个代码,它将遍历一个对象数组,找到哪个值为null,然后添加一个'question'键,使其等于“Hi,请提供您的'key'。”最后,我想返回带有question键的对象数组 请参阅下面的代码: var list1 = [ { firstName: null, lastName: 'I.', country: 'Argentina', continent: 'Americas', age: 35, language: 'Java'
var list1 = [
{ firstName: null, lastName: 'I.', country: 'Argentina', continent: 'Americas', age: 35, language: 'Java' },
{ firstName: 'Lukas', lastName: 'X.', country: 'Croatia', continent: 'Europe', age: 35, language: null },
{ firstName: 'Madison', lastName: 'U.', country: 'United States', continent: 'Americas', age: 32, language: 'Ruby' }
];
function askForMissingDetails(list) {
for (let i = 0; i < list.length; i++) {
for (var prop in list[i]) {
if ( list[i].prop == null)
list[i]['question'] = `Hi, could you please provide your ${prop}.`;
else
list.splice(i,1);
}
}
return list;
}
console.log(askForMissingDetails(list1))
看起来您正在混淆访问对象的方式。首先,您正在阅读
列表[i].prop
。这将查找一个按字面意思叫做prop
的属性。要解决此问题,请将其更改为list[i][prop]
。本例中的方括号表示动态查找。您不是在寻找prop
键,而是在寻找prop
的值,我相信您要的是map/reduce操作
您希望更改原始数组,以包括存在null
值(“map”)的问题,并过滤掉完整的条目(“reduce”)
这一切都可以通过使用
const list=[{“firstName”:null,“lastName”:“I.”,“国家”:“阿根廷”,“大陆”:“美洲”,“年龄”:35,“语言”:“爪哇”},{“firtname”:“卢卡斯”,“lastName”:“X.”,“国家”:“克罗地亚”,“大陆”:“欧洲”,“年龄”:35,“语言”:null},{“firtname”:“麦迪逊”,“lastName”:“U.”,“国家”:“美国”,“大陆”:“美洲”,“年龄”:32,“语言”:“Ruby”}]
const missingDetail=列表。减少((arr,项目)=>{
//查找第一个空值条目
让[missing]=Object.entries(item).find([prop,val])=>val==null)| |[]
如果(缺失){
//missing包含第一个空值的属性名
//将带有问题对象的新项推送到最终数组
arr.push({
…项目,
问题:`嗨,你能提供你的${missing}吗}`
})
}
返回arr
}, [])
console.info(missingDetail)
I如果对象中有多个空值,则使用reduce创建一个新列表,其中包含要保留在数组中的属性问题:
var列表1=[
{
名字:空,
姓氏:“I.”,
国家:“阿根廷”,
大陆:“美洲”,
年龄:35岁,
语言:“Java”
},
{
名字:“卢卡斯”,
姓氏:“X.”,
国家:“克罗地亚”,
欧洲大陆:“欧洲”,
年龄:35岁,
语言:空
},
{
名字:“麦迪逊”,
姓氏:“U.”,
国家:“美国”,
大陆:“美洲”,
年龄:32岁,
语言:“Ruby”
},
{
名字:“基督徒”,
姓氏:空,
国家:“佩鲁”,
大陆:空,
年龄:32岁,
语言:空
}
];
//使用list1作为上下文应用要保存在myNewList上的reduce
const myNewList=list1.reduce((acc,item)=>{
//itering为当前对象的名称设置关键帧
Object.keys(项).forEach(项=>{
//如果当前键名为空,则其值为空
如果(!项[键]){
//如果没有名为question的键名,我将它创建为一个新的空数组
如果(!item.question)item.question=[];
//将具有当前密钥名的消息推入数组(因为为null)
item.question.push(`Hi,你能提供你的${key}.`);
}
});
//将当前对象推入累加器
如果(项目问题)根据推送(项目);
返回acc;
}, []);
console.log(myNewList)
您可能想要list[i][prop]
而不是list[i].prop
。您还可能在迭代时修改列表
,这样会产生副作用如果有多个值为null
,会发生什么情况?这是非常彻底的,但OP表示他们希望从最终结果中省略完整的项array@Phil哦,对不起。。。我没有完全阅读,嗯,如果在acc.push(项目)上,我应该添加一个。这不完全是我想要的,但这是一个我可以通过的reduce的好例子。谢谢:)
[
0: {
firstName: null
lastName: "I."
country: "Argentina"
continent: "Americas"
age: 35
language: "Java"
question: "Hi, could you please provide your question."
}
1: {
firstName: "Lukas"
lastName: "X."
country: "Croatia"
continent: "Europe"
age: 35
language: null
question: "Hi, could you please provide your question."
}
2: {
firstName: "Madison"
lastName: "U."
country: "United States"
continent: "Americas"
age: 32
language: "Ruby"
question: "Hi, could you please provide your language."
}]
let result = list1.reduce((acc, list) => {
let missedKey = "";
for(let key in list){
if(!list[key]) missedKey = key
}
if(missedKey) {
list.question = `Hi, could you please provide your ${missedKey}.`
acc.push(list)
};
return acc;
}, []);