js中循环删除一个数组在另一个数组中不存在的元素删除(包含js对象和数组的构造)

  • 已有元素分别是:
  • js对象(A)
var hashMap = {
	"key1" : "aaa",
	"key2" : "bbb"
};
  • 这里js对象构造的过程是:
var hashMap = {};
hashMap['key1'] = "aaa";
hashMap['key2'] = "bbb";
  • js对象数组(B)
var arr = [ {
	key : "aaa",
	value : "张三"
}, {
	key : "bbb",
	value : "李四"
}, {
	key : "ccc",
	value : "王五"
} ];
  • 这里js对象数组构造的过程是:
var arr = [];
var obj = {};
var obj2 = {};
var obj3 = {};
obj['key'] = "aaa";
obj['value'] = "张三";
arr.push(obj);
obj2['key'] = "bbb";
obj2['value'] = "李四";
arr.push(obj2);
obj3['key'] = "ccc";
obj3['value'] = "王五";
arr.push(obj3);
  • 现在需要找到(B)中的key,不存在于(A)中的value的情况下,删除掉(B)的key。
//拿B的key去A中找,所以先拿到B中的第一个key循环去A中的value查找
for (var i = 0; i < arr.length; i++) {
	//是否存在标记
	var flag = false;
	for ( var key in hashMap) {
		if (hashMap[key] == arr[i].key) {
			//B中的key在A中的value能找到,则不再往下继续查找,标记等于true
			flag = true;
			break;
		}
	}
	if (flag == false) {
		// 内层循环走完还是false,说明arr[i]中的key既不是aaa,也不是bbb,不存在则删除
		arr.splice(i, 1);
		//删了元素,后面元素会往前移,需要往前移动一下指针
		i--;
	}
}
  • 在这个数据的处理过程中,没有想到使用标记来标明的方式。突然一下思想进了死胡同了,我能想到比较两个数组相同的元素然后使用一个新的数组来存储的方式找到共同的元素,但是删除掉不重复的元素竟然一时没有转过弯。最先开始的想发发现写不下去:
for (var i = 0; i < arr.length; i++) {
	for ( var key in hashMap) {
		if (hashMap[key] != arr[i].key) {//不相等则删除
			//如果拿B中的第一个key开始循环的时候,
			//就发现A的value值当中不存在的话,就去删除掉,
			//这样不行,因为现在是B相比较A中的第一个value不存在,
			//不代表在后面第二个、第三个...都不存在,所以不能删除。
		}
	}
}

你可能感兴趣的:(javascript,前端)