Javascript 如何处理输入字符串数组并使其与对象数组键匹配(即使存在嵌套)?
例如,我有一个字符串数组:Javascript 如何处理输入字符串数组并使其与对象数组键匹配(即使存在嵌套)?,javascript,Javascript,例如,我有一个字符串数组: let inputNames = ['name', 'address[city]', 'address[state]']; 使用此示例错误对象: let errors = { name: {message:"error in name"}, address: { city: {message:"error in address city"}, state: {message:"error in address state"}
let inputNames = ['name', 'address[city]', 'address[state]'];
使用此示例错误对象:
let errors = {
name: {message:"error in name"},
address: {
city: {message:"error in address city"},
state: {message:"error in address state"}
}
}
在名称之间循环时,我希望根据输入名称检查错误:
inputNames.forEach(n=> {
if(typeof errors[n] !== 'undefined') {
console.log(errors[n]);
} else {
console.log('SHOULD have returned value of', errors.address.city);
}
})
保持简单并使用lodash的
get
功能
const {get} = require("lodash");
let inputNames = ['name', 'address.city', 'address.state'];
let errors = {
name: {message:"error in name"},
address: {
city: {message:"error in address city"},
state: {message:"error in address state"}
}
}
inputNames.forEach(n=> {
if(get(errors, n)) {
console.log(get(errors, n));
} else {
console.log('SHOULD have returned value of', errors.address.city);
}
})
或您可以使用普通javascript通过此函数实现这一点
function get(obj, path) {
return path.split('.').reduce((parent, child)=> parent && parent[child]||null, obj)
}
保持简单并使用lodash的
get
功能
const {get} = require("lodash");
let inputNames = ['name', 'address.city', 'address.state'];
let errors = {
name: {message:"error in name"},
address: {
city: {message:"error in address city"},
state: {message:"error in address state"}
}
}
inputNames.forEach(n=> {
if(get(errors, n)) {
console.log(get(errors, n));
} else {
console.log('SHOULD have returned value of', errors.address.city);
}
})
或您可以使用普通javascript通过此函数实现这一点
function get(obj, path) {
return path.split('.').reduce((parent, child)=> parent && parent[child]||null, obj)
}
您可以使用
lodash
<代码>\.get(对象、键、默认值)
让inputNames=['name','address[城市],'address[州];
让错误={
名称:{消息:“名称错误”},
地址:{
城市:{消息:“地址城市错误”},
状态:{消息:“地址状态错误”}
}
};
console.log(u.get(错误,输入名称[1]))
您可以使用lodash
<代码>\.get(对象、键、默认值)
让inputNames=['name','address[城市],'address[州];
让错误={
名称:{消息:“名称错误”},
地址:{
城市:{消息:“地址城市错误”},
状态:{消息:“地址状态错误”}
}
};
console.log(u.get(错误,输入名称[1]))
您实际遇到的问题是哪一部分?这包括三个部分:迭代、缩减(查看是否至少有一个错误)和子特性提取。如果最后一部分是给你带来麻烦的话,考虑一下LoaScript是如何实现的,看看它是否有用。没有一种本机方法可以将您描述的路径字符串转换为对象访问调用。您实际遇到的问题是哪一部分?这包括三个部分:迭代、缩减(查看是否至少有一个错误)和子特性提取。如果最后一部分是给你带来麻烦的话,考虑一下LoaScript是如何实现的,看看它是否有用。没有一种本机方法可以将您描述的路径字符串转换为对象访问调用。感谢您提供的纯javascript版本!感谢您的纯javascript版本!