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版本!