# 操作对象数组

# 前言

# 起源

  • 对象数组与二维数据表相似
  • 工作中大部分接触对象数组,很多时候都是在对对象数组进行操作以及对其中的数据进行处理

# 所用数据

不说明的情况,所用的数据一般指以下。

# 数据

let student = [
  {
    id: 1,
    stuNo: 20190801,
    name: "王二二",
    age: 21,
    major: "计算机科学与技术",
    isParty: 1,
    sex: 0,
  },
  {
    id: 2,
    stuNo: 20190802,
    name: "李冬梅",
    age: 20,
    major: "计算机科学与技术",
    isParty: 0,
    sex: 1,
  },
  {
    id: 3,
    stuNo: 20190803,
    name: "张晓芳",
    age: 21,
    major: "汉语言文学",
    isParty: 1,
    sex: 1,
  },
  {
    id: 4,
    stuNo: 20190804,
    name: "张雨",
    age: 24,
    major: "汉语言文学",
    isParty: 1,
    sex: 0,
  },
  {
    id: 5,
    stuNo: 20190805,
    name: "张子豪",
    age: 22,
    major: "通信工程",
    isParty: 0,
    sex: 0,
  },
];

# 数据含义说明

属性名称 中文含义 备注
id id
stuNo 学号 8 位
name 名字
age 年龄
major 专业
isParty 是否是党员 否:0,是:1
sex 性别 男:0, 女:1

# 目录

# 普通截取

  • 截取 1
student.map(({ id, name }) => ({ id, name }));

/*-----res-----*/
[
  { id: 1, name: "王二二" },
  { id: 2, name: "李冬梅" },
  { id: 3, name: "张晓芳" },
];
  • 截取 2
student.map(({ id }) => id);
/*----- res-----*/
[1, 2, 3];

# 截取属性并去重

  • 去重 1: 返回对象数组
getUniqueArray(array, item){
    let uniqueArray = [];
    for (let i = 0; i < array.length; i++) {
      let flag = true;
      for (let j = 0; j < uniqueArray.length; j++) {
        if ((uniqueArray[j][item] === array[i][item])) {
          flag = false;
        }
      }
      if (flag) {
        uniqueArray.push(array[i]);
      }
    }
    return uniqueArray;
  }
  • 去重 2: 返回一维数组
[...new Set(student.map(({ sex }) => sex))];

/*----- res -----*/
[0, 1];

# 过滤

    1. 比较运算符及逻辑运算: = > < >= ,<=, !=,<> ,|| &&
student.filter((item) => item.age > 20);
/*-----res-----*/
[
  { id: 1, stuNo: 20190601, name: "王二二", age: 21, major: "计算机科学与技术", isParty: 1, sex: 0 },
  { id: 3, stuNo: 20190620, name: "张晓芳", age: 21, major: "汉语言文学", isParty: 1, sex: 1 },
];

student.filter((item) => item.sex === 0);
/*----- res -----*/
[{ id: 1, stuNo: 20190601, name: "王二二", age: 21, major: "计算机科学与技术", isParty: 1, sex: 0 }];

student.filter((item) => item.age > 20 && item.age < 22);
/*----- res -----*/
[
  { id: 1, stuNo: 20190601, name: "王二二", age: 21, major: "计算机科学与技术", isParty: 1, sex: 0 },
  { id: 3, stuNo: 20190620, name: "张晓芳", age: 21, major: "汉语言文学", isParty: 1, sex: 1 },
];
  1. in 范围 查询学号为[20190601,20190614]的数组
let range = [20190601, 20190614];
let res = student.filter((item) => range.includes(item.stuNo));
/*----- res -----*/
[
  { id: 1, stuNo: 20190601, name: "王二二", age: 21, major: "计算机科学与技术", isParty: 1, sex: 0 },
  { id: 2, stuNo: 20190614, name: "李冬梅", age: 20, major: "计算机科学与技术", isParty: 0, sex: 1 },
];
  1. 模糊查询 查询名字为'张'的学生
student.filter((item) => item.name.includes("张"));
/*----- res ------*/
[
  { id: 3, stuNo: 20190620, name: "张晓芳", age: 21, major: "汉语言文学", isParty: 1, sex: 1 },
  { id: 4, stuNo: 20190620, name: "张雨", age: 24, major: "汉语言文学", isParty: 1, sex: 0 },
];

# 排序

  1. 升序
/*------ 按年龄从小到大排序 ------ */
student.sort((a, b) => a.age > b.age);
/*------ res ------*/
[
  { id: 2, stuNo: 20190614, name: "李冬梅", age: 20, major: "计算机科学与技术", isParty: 0, sex: 1 },
  { id: 1, stuNo: 20190601, name: "王二二", age: 21, major: "计算机科学与技术", isParty: 1, sex: 0 },
  { id: 3, stuNo: 20190620, name: "张晓芳", age: 21, major: "汉语言文学", isParty: 1, sex: 1 },
  { id: 4, stuNo: 20190620, name: "张雨", age: 24, major: "汉语言文学", isParty: 1, sex: 0 },
];
  1. 降序
/*----- 按年龄从大到小排序 ------ */
student.sort((a, b) => a.age < b.age);
/*------ res ------*/
[
  { id: 4, stuNo: 20190620, name: "张雨", age: 24, major: "汉语言文学", isParty: 1, sex: 0 },
  { id: 1, stuNo: 20190601, name: "王二二", age: 21, major: "计算机科学与技术", isParty: 1, sex: 0 },
  { id: 3, stuNo: 20190620, name: "张晓芳", age: 21, major: "汉语言文学", isParty: 1, sex: 1 },
  { id: 2, stuNo: 20190614, name: "李冬梅", age: 20, major: "计算机科学与技术", isParty: 0, sex: 1 },
];

# 插入数据

[...student, ...newStudent];
/*----- res ----- */
[
  { id: 1, stuNo: 20190601, name: "王二二", age: 21, major: "计算机科学与技术", isParty: 1, sex: 0 },
  { id: 2, stuNo: 20190614, name: "李冬梅", age: 20, major: "计算机科学与技术", isParty: 0, sex: 1 },
  { id: 3, stuNo: 20190620, name: "张晓芳", age: 21, major: "汉语言文学", isParty: 1, sex: 1 },
  { id: 4, stuNo: 20190620, name: "张雨", age: 24, major: "汉语言文学", isParty: 1, sex: 0 },
  { id: 5, stuNo: 2019067, name: "马宇", age: 23, major: "旅游管理", isParty: 1, sex: 1 },
];

# 操作对象数组

# 转为对象数组

数据如下

let price = {
  空调: 12200,
  冰箱: 14440,
  洗衣机: 1222,
};

具体操作

let newPrice = [];
for (let [k, v] of Object.entries(price)) {
  newPrice = [...newPrice, { name: k, value: v }];
}
/*------ 结果 -----*/
[
  { name: "空调", value: 12200 },
  { name: "冰箱", value: 14440 },
  { name: "洗衣机", value: 1222 },
];

# 对数组元素做同一操作

const add = (num) => num + 1;
console.log([1, 2, 3].map(add)); // [2,3,4]

# 获取名称

const getNameInList = (val, list) => {
  const curList = list.filter((item) => item.value == val);
  return curList.length > 0 ? curList[0].name : "";
};

# 获取值

const getValueInList = (name, list) => {
  const curList = list.filter((item) => item.name == name);
  return curList.length > 0 ? curList[0].value : "";
};