js数组一些操作

1.push之后原数组和push之后的元素为什么值,push会改变原数组
push:在数组尾部添加一个或者多个元素,并且返回新数组的长度

const a = [2, 3, 4];
const b = a.push(5);
console.info(a); // [2,3,4,5]
console.info(b); // 4

2.js中数组push对象,前面的值总是被最后一次的值覆盖的问题
js中定义了一个数组,每次往里面push对象,结果最后一次push的对象会覆盖之前push进去的值。

var data = {
    
     a:'123', b: '456', c: '789'};  
var dataObj = {
    
    };//在外面定义对象  
var dataArr = [];  

for(var i in data) {
    
      
    dataObj.name= data[i];  
    dataArr.push(dataObj);  
}  

console.log(dataArr) 

在这里插入图片描述
原因:
每次取出来的值都放在dataObj.name中,因为是在外面的定义的对象,所以每次dataObj的地址是一样的,
dataArr中保存的是dataObj的地址,当最后一次给dataObj.name赋值为789时,由于是同一个dataObj,
所以最后一次给dataObj.name赋值给讲前两次的值给覆盖掉,其实第二次已经把第一次的值覆盖过了

解决方法:

var data = {
    
     a:'123', b: '456', c: '789'};  
var dataArr = [];  

for(var i in data){
    
      
	var dataObj = {
    
    };//在里面定义对象  
    dataObj.name= data[i];  
    dataArr.push(dataObj);  
}  

console.log('data: ',data,'dataObj:',dataObj,'dataArr:',dataArr)

在这里插入图片描述
这样每次都是新的对象,dataObj.name指向的地址都不一样,数据就对了
这样输出的结果就是:123,456,789


es6 every some
some  (一些存在就存在-----一真即真)
对数组的每一项都运行给定的函数,任意一项都返回 ture,则返回 true
every (所有存在才存在  -----一假即假)
对数组的每一项都运行给定的函数,每一项都返回 ture,则返回 true

3-1

var a1=[1,2,3,4,5];
var b1=[4,5,678,6,7,8];
var e1=b1.filter(item =>!a1.some(el=> item == el)); 
console.log('e1:',e1)

在这里插入图片描述
3-2

var a1=[1,2,3,4,5];
var b1=[4,5,678,6,7,8];
var e1=b1.filter(item =>a1.some(el=> item == el)); 
console.log('e1:',e1)

在这里插入图片描述
3-3

var a1=[1,2,3,456];
var w=a1.some(item => item>2);
console.log('w:',w)
------------------写法二-------------
function fn(element,index,array){
    
    
	return element>2
}
[1,2,3,456].some(fn)

在这里插入图片描述
在这里插入图片描述

3-4

var a1=[1,2,3,456];
var w=a1.every(item => item>2);
console.log('w:',w)

在这里插入图片描述
3-5

function fn(element, index, array) {
    
    
    return element < 10;
}

[2, 5, 8, 3, 4].every(fn); // true

3-6

function fn(element, index, array) {
    
    
    return element > 10;
}

[2, 5, 8, 1, 4].some(fn); // false
[12, 5, 8, 1, 4].some(fn); // true

4.arr.reverse()方法可以实现数组反序。

var arr=['第一项','33','哟'];
console.log(arr.reverse());

在这里插入图片描述


2021/11/10补充 数据去重
export function mergeArray(__) {
    
    
  for (let i = 0; i < __.length; i++) {
    
    
    for (let j = i + 1; j < __.length; j++) {
    
    
      if (__[i] === __[j]) {
    
    
        __.splice(j, 1)
        j--
      }
    }
  }
  return __
}

2021/11/23

改变原数组
Vue 将被侦听的数组的变更方法进行了包裹,所以它们也将会触发视图更新。
这些被包裹过的方法包括:

push()
pop()
shift()
unshift()
splice()
sort()
reverse()

原数组不改变

filter()、concat() 和 slice()。它们不会变更原始数组,
而总是返回一个新数组。
当使用非变更方法时,可以用新数组替换旧数组:

example1.items = 
	example1.items.filter(item => item.message.match(/Foo/))

猜你喜欢

转载自blog.csdn.net/weixin_41056807/article/details/118701280