Javascript 过滤 JSON 数据

Javascript Filtering JSON data

示例 JSON 数据:

{
  "assignments": [{
    "date": "2022-04-01",
    "lName": "lastname",
    "uId": "12345",
    "uCode": "LName1",
    "fName": "FName1 ",
    "aName": "AsignmentName1",
    "aId": "998"
  }]
}

我想根据任务名称的搜索来筛选以下数据以获取特定元素的内容。

例如SQL 喜欢的条款

Select * FROM assignments WHERE `aName` = 'AssignmentName1'

我确定这很简单,但在实现方法方面遇到了麻烦。

谢谢

您首先必须解析 JSON 字符串:

const parsedJSON = JSON.parse(jsonString);

返回的对象包含 JSON 字符串中的所有数据。要访问分配数组,您可以使用点表示法。

const assignments = parsedJSON.assignments;

如果您不需要支持旧浏览器,ES6 有一个方便的函数可以在对象中查找值。使用“查找”函数并传递一个 returns 对您要查找的项目为真的函数:

const selectedAssignment = assignments.find( (assignment)=> {
  return assignment.aName=="AssignmentName2";
});

如果你不想使用 ES6,你可以使用 for 循环。

var assignments = JSON.parse(jsonString).assignments;
function getAssignmentWithName(name) {
  for (var i = 0; i < assignments.length; i++) {
    if (assignments[i].aName == name) {
      return assignments[i];
    }
  }
  return false;
}
var selectedAssignment = getAssignmentWithName("AssignmentName1");

我是新来的,但如果你能接触到现代JavaScript,我会做类似的事情:

const data = JSON.parse('{"assignments":[{"date":"2022-04-01","lName":"lastname","uId":"12345","uCode":"LName1","fName":"FName1 ","aName":"AsignmentName1","aId":"998"}]}';
const yourMatch = data.assignments.find(c => c.aName === 'AssignmentName1');
  • 因为data.assignments是一个数组,你可以在它上面调用find()函数。此函数以 'search'-function/lambda 作为参数。
  • 此搜索功能基本上采用一个元素并决定它是否是您要搜索的那个,或者不是 returns 布尔值。
  • 在我的示例中,箭头函数是 c => c.aName === 'AssignmentName1',它比普通函数定义更短且更易于阅读。 (你可以随便叫c,这样更干净。)
  • 如果您接受多个结果而不仅仅是第一个,您可以将 find()filter() 交换。