JavaScript两个数组的数据处理

news/2024/7/19 14:50:58 标签: js, javascript, object, array, map

来自思否的一个问答。
原文链接

正文

问题

提问者大概需求为将下面的两个数组,经过处理后变为预期的数组
原数组

javascript">const arr1 = [{ uid: 2 }, { uid: 3 }, { uid: 4 }];
const arr2 = [
	{
		text: '随便1',
		children: [{ uid: 1 }, { uid: 2 }],
	},
	{
		text: '随便2',
		children: [{ uid: 3 }, { uid: 4 }],
	},
	{
		text: '随便3',
		children: [{ uid: 5 }, { uid: 6 }],
	},
];

预期数组

javascript">arr2 = [
  {  
    text: '随便1',
    children: [
      {uid: 1, checked: false},
      {uid: 2, checked: true}
    ]
  },
  {  
    text: '随便2',
    children: [
      {uid: 3, checked: true},
      {uid: 4, checked: true}
    ]
  },
  {  
    text: '随便3',
    children: [
      {uid: 5, checked: false},
      {uid: 6, checked: false}
    ]
  }
]

答案

这里提两种方案,一种是直接改变arr2数组本身的,一种是返回一个新数组的。

返回新数组
javascript">const fn = (source, target) => {
	return target.map(item => {
		return {
			...item,
			children: item.children.map(item1 => {
				return {
					uid: item1.uid,
					isChecked: source.some(item2 => item2.uid === item1.uid),
				};
			}),
		};
	});
};

console.log(fn(arr1, arr2));

写这篇博客的目的就在于此,重温map的用法。首先,map的callback必须有返回值,这些返回值回组成一个新的数组。如果想题目中那样得到预期数组且不改变原数组,则首先想到的就是map。原数组的每一项都是对象,则要想原数组的属性利用解构...copy过来,其中的属性是应用类型的话,要再一次进行map。总之,如果用map产生新的对象数组,则要有深拷贝思想。

直接修改数组
javascript">const fn = (source, target) => {
	target.forEach(item => {
		item.children.forEach(child => {
			child.isChecked = source.some(item1 => item1.uid === child.uid);
		});
	});
};

这种方法比较简单,笔者就不多说了。
欢迎批评指正!


http://www.niftyadmin.cn/n/1257931.html

相关文章

MySQL、Oracle和SQL Server的分页查询语句

原文地址:http://www.cnblogs.com/ginponson/p/5746435.html 假设当前是第PageNo页,每页有PageSize条记录,现在分别用Mysql、Oracle和SQL Server分页查询student表。 1.Mysql的分页查询 SELECT * FROM student LIMIT (PageNo - 1) * PageSi…

List 中去除 null 方法讨论

先看下面的程序段&#xff1a; public static void main(String[] args) { List<Integer> arrays new ArrayList<Integer>(); arrays.add(2); arrays.add(null); arrays.add(456); arrays.add(null); arrays.add(789); System.out.println(arrays); } …

前端工作周报8.2

记录工作中的收获 正文 1. 样式问题 文字超出容器显示省略号&#xff0c;必须设置三个属性&#xff1a; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;除此之外&#xff0c;容器的display需为block/inline-block Margin负值不生效的话&#xff0c;考虑…

Python字符串基本操作

Python字符串基本操作 1、判断是不是合法的标识符isidentifier name"ABC" print(name.isidentifier()) 打印结果 True 2、首字母大写capitalize name abc print(name.capitalize()) 打印结果 Abc 3、计数count name abc print(name.count("a")) 打印结果 1…

js 字符串转数值 的常用方法和对比

话不多说&#xff0c;直接正文。 正文 常用方法为这三种 ~~按位取反再取反&#xff0c;作用是把字符串变为整数数值。Number(str) 会保留小数点parseInt(str) 化为整数数值 console.log(Number("121")); console.log(parseInt("121")); console.log(~~…

前端工作周报8.9

记录下前端实习工作的问题和收获。 正文 1. javaScript相关 即使 null 和 undefined 有关系&#xff0c;它们的用途也是完全不一样的。永远不必显式地将变量值设置为 undefined 。但 null 不是这样的。任何时候&#xff0c;只要变量要保存对象&#xff0c;而当时又没有那个对…

前端工作周报 8.16 8.23

本应两周写两个周报&#xff0c;但在上周主管和我说不用干vue了&#xff0c;需要学习dart->flutter。这两周主要是在学习&#xff0c;这个博客会贴很多平时联系的代码。 8.16 - 8.17 Dart 安装 下载SDK配置环境 helloworld 学习笔记 PS&#xff1a;很多与js相同的语法默认…

flutter中的EventBus

插件地址&#xff1a;event_bus 用法 定义事件类型&#xff0c;通常来说是定义类&#xff0c;可以在类中定义属性来传参 class LoginSuccessEvent {}class WarningEvent {String msg;WarningEvent(this.msg); }在需要监听事件的页面initState阶段添加监听 void initState() …