陣列數據操作 - daniel-qa/Vue GitHub Wiki

陣列數據操作

unshift

在陣列開頭新增元素。

let fruits = ["香蕉", "蘋果"];

// 使用 unshift 在陣列最前面新增一個元素 "橘子"
fruits.unshift("橘子");

console.log(fruits);
// 輸出結果:["橘子", "香蕉", "蘋果"]

p.s push(): 在陣列結尾新增元素。

get()

.get(key) 是 JavaScript 中 Map 結構的查詢方法,用來根據「鍵(key)」取出對應的「值(value)」。

就像字典一樣,你可以用一個 key 快速查出對應的資料。

const tchCntMap = new Map([
  ['habook', 3],
  ['tm01', 12],
]);

console.log(tchCntMap.get('habook')); // → 3
console.log(tchCntMap.get('tm01'));   // → 12
console.log(tchCntMap.get('abc'));    // → undefined (因為不存在)

filter() ,Smoe()

const sameIdItems = noticeForm.receiverList.filter((data) => data.id === item.id);

const hasDuplicateShowIDTag = sameIdItems.some((data) => data.showID_Tag === item.showID_Tag);
語法 用途 差別
.filter() 找出「全部符合條件的項目」,回傳一個陣列 篩選多筆
.some() 判斷「陣列裡有沒有至少一筆符合條件的」,回傳布林值 true/false 條件判斷
  • some() 的說明
// 由 ID 檢查
const isExist = column3Items.value.some((data) => data.id === item.id);  

如果 isExist 為 true,代表已有相同 id 存在:

.some((column3) => ...) Array.prototype.some() 是 JS 陣列的一個方法。

  • 它會遍歷陣列裡的每一個元素,只要有任一項目符合條件就會回傳 true

  • 全部不符合,才會回傳 false。

  • 一旦找到符合條件的項目,就會立刻停止迴圈(效率高)。

join

const arr = ['a', 'b', 'c'];
const str = arr.join('-');  // 結果是 "a-b-c"

splice ( 拼接)

['area', 'school', 'geo']

如果 idx = 1(即 'school' 的位置),執行 newVal.splice(1, 1); 後,newVal 會變成:

['area', 'geo']

也就是把 'school' 這個值從陣列中移除。

slice

  • 從陣列(或字串)中擷取一段子陣列(或子字串),不會改變原本的陣列(或字串,組成新陣列
const arr = [10, 20, 30, 40, 50];

// 取出索引 1 到 3(不含 3),即 [20, 30]
const subArr = arr.slice(1, 3);

console.log(subArr); // [20, 30]
console.log(arr);    // [10, 20, 30, 40, 50](原陣列不變)

map

// 資料 map, 和抓出傳送名單
noticeHistory.value = response.map((item) => {
    const searchContent = [];

    //抓出傳送名單,組成新的陣列
    if (Array.isArray(item.search)) {
        item.search.forEach((s) => {
            // 根據你的規則,取 area 或 school 的對應欄位
            if (s.mode === 'area' && s.areaId) {
                searchContent.push({
                    mode: s.mode,
                    id: s.areaId,
                    name: s.areaName
                });
            } else if (s.mode === 'school' && s.school) {
                searchContent.push({
                    mode: s.mode,
                    id: s.school,
                    name: s.schoolName
                });
            }
        });
    }

    return {
        subject: item.subject,
        theme: item.theme,
        content: item.content,
        selType: selTypeMap[item.selType],
        msgType: msgTypeMap[item.msgType],
        searchContent, // ⬅ 這裡是你要的格式
        sendTime: new Date(item.sendTime).toLocaleString(),
    };
});
  • 2 .比較直覺的
 // 發送名單 
 const sendList = ref([
     {
         mode: "",
         id: "",
         name: ""
     }
 ]);

const dataList = response;

// 抓出傳送名單
sendList.value = []; // 先清空
        
dataList.forEach(item => {
    if (Array.isArray(item.search)) {
        item.search.forEach(s => {
            if (s.mode === 'area' && s.areaId) {
                sendList.value.push({
                    mode: s.mode,
                    id: s.areaId,
                    name: s.areaName
                });
            } else if (s.mode === 'school' && s.school) {
                sendList.value.push({
                    mode: s.mode,
                    id: s.school,
                    name: s.schoolName
                });
            }
        });
    }
});