javascript - 按值查找对象内部的项目并将它们分配给初始搜索值
问题描述
基本上我正在尝试匹配来自 JSON 的值,它们有父子关系
大批:
{
"item_sku": "BAG-WM-03",
"color_name": "",
},
{
"item_sku": "BAG-WM-03-YEL-UNI",
"color_name": "Amarillo",
}
{
"item_sku": "BAG-WM-03-ROJ-UNI",
"color_name": "Rojo",
}
我需要获取作为父项的项目(基于 sku .length
- 数据中有一个模式)并将子项分配给父项。
寻找这样的东西:
{
"item_sku": "BAG-WM-03",
"children": "BAG-WM-03-YEL-UNI, BAG-WM-03-ROJ-UNI",
}
PS这里是初学者,请温柔:)
解决方案
您可以通过以下步骤执行此操作:
- 创建给定数组的深层副本,然后用于
map()
更改删除属性color_name
并添加新属性children
并将其设置为[]
- 用于
forEach()
迭代数据副本。 - 用于
find()
获取item_sku
位于当前项的开头的对象item_sku
。这将是父母。 - 如果您发现父元素将元素推送到该父元素的子元素。
- 最后
filter()
取出那些children
不包含任何元素的对象。
const arr = [
{
"item_sku": "BAG-WM-03",
"color_name": "",
},
{
"item_sku": "BAG-WM-03-YEL-UNI",
"color_name": "Amarillo",
},
{
"item_sku": "BAG-WM-03-ROJ-UNI",
"color_name": "Rojo",
}
]
let clone = JSON.parse(JSON.stringify(arr)).map(x => ({item_sku:x.item_sku,children:[]}));
clone.forEach(a => {
let parent = clone.find(x => a.item_sku.startsWith(x.item_sku) && a !== x);
if(parent) parent.children.push(a.item_sku);
})
clone = clone.filter(x => x.children.length)
console.log(clone)
推荐阅读
- java - Android - 如何在不损失图像质量的情况下将位图图像从一个活动传递到另一个活动
- .net - 使用 NodaTime 解析包含 BST 和 GMT 的日期和时间字符串
- java - aD 输出的原因
- c++ - 如果用户输入 0 或更少,如何同时显示输出和结束程序
- php - 列出工资覆盖日期 PHP
- git - 为什么每次我拉到我的虚拟主机时 git 都会进行合并?
- ruby - 为什么我收到 502 Bad Gateway nginx/1.18.0 - Elastic Beanstalk 上的 Rails 应用程序
- android - 在 android 中使用 Work Manager API 的定期任务
- python - 将文本文件中的矩阵解析为python中的实际(基于数组的)矩阵?
- c# - 我正在使用 Xamarin Shell,但有时我也想在没有 Shell 的情况下打开页面。我怎样才能做到这一点?