如何從 JavaScript 陣列中移除重複值

給定一個陣列,你該如何將其中的重複值移除? 假設你有一個包含一系列基本值的陣列,例如數字或字串。 其中一些元素是重複的。 就像這個例子中: const list = [1, 2, 3, 4, 4, 3] 我們可以使用以下方式產生一個新的陣列,其中不包含重複的值: const uniqueList = [...new Set(list)] 現在,uniqueList 將成為一個新的陣列,其中包含值 [1, 2, 3, 4]。 這是如何運作的呢? Set 是一種新的資料結構,在 ES6 中的 2015 年被引入,它的主要特點是能夠在同一個集合中不能重複儲存資料。請參考我關於 Set 的完整指南。 通過使用解構陣列的方式初始化一個 Set(請看到 ... 操作符在 new Set() 前面),我們將值傳入 Set 中,Set 會自動移除重複的值。然後我們將其轉換為一個陣列,使用方括號 [] 包裹起來。 這個方法對於任何不是物件的值都適用:數字、字串、布林值、符號。

如何從 JavaScript 陣列中移除項目

在 JavaScript 中,有很多方法可以從陣列中移除項目。學習使用官方推薦的方式,並瞭解其他可以選擇的選項。 以下是一些使用 JavaScript 移除陣列項目的方法。 所有下列方法都不會改變原始陣列,而是創建一個新的陣列。 如果你知道項目的索引 假設你有一個陣列,想要移除位於索引 i 的項目。 一種方法是使用 slice(): const items = ['a', 'b', 'c', 'd', 'e', 'f'] const i = 2 const filteredItems = items.slice(0, i).concat(items.slice(i + 1, items.length)) // ["a", "b", "d", "e", "f"] slice() 方法會使用傳入的索引值創建一個新的陣列。我們從開始到我們想要移除的索引位置創建一個新的陣列,然後將另一個從移除索引位置的下一個位置開始到陣列結尾的陣列連接起來。 如果你知道項目的值 在這種情況下,使用 filter() 是一個很好的選擇,它提供了更加聲明式的方式: const items = ['a', 'b', 'c', 'd', 'e', 'f'] const valueToRemove = 'c' const filteredItems = items.filter(item => item !== valueToRemove) // ["a", "b", "d", "e", "f"] 這裡使用了 ES6 的箭頭函式。你可以使用傳統函式來支援舊版瀏覽器:...

如何從 JavaScript 陣列中獲取一組物件的唯一屬性

給定一個物件陣列,如果你想要獲取屬性的值,但不包含重複的值,你可以這樣做。 假設你有一個 bills 陣列,內容如下: const bills = [ { date: '2018-01-20', amount: '220', category: 'Electricity' }, { date: '2018-01-20', amount: '20', category: 'Gas' }, { date: '2018-02-20', amount: '120', category: 'Electricity' } ] 並且你想要提取該陣列中每個項目的 category 屬性的唯一值。 以下是你可以執行的操作: const categories = [...new Set(bills.map(bill => bill.category))] 解釋 Set 是 JavaScript 在 ES6 中新增的一種資料結構,它是一個包含唯一值的集合。我們將使用 map() 獲取的屬性值列表放入其中,這將返回以下陣列: ['Electricity', 'Gas', 'Electricity'] 通過 Set,我們將刪除重複的值。 ... 是 展開運算子,將展開 Set 中的值到一個陣列中。

如何從 macOS 命令行播放聲音

使用內建的 afplay 命令: afplay file.mp3 這裡還有一些來自 tldr.sh 的其他選項: afplay 命令行音頻播放器。 更多信息:https://ss64.com/osx/afplay.html。 - 播放聲音文件(等待播放結束): afplay path/to/file - 以2倍速播放聲音文件(播放速度): afplay --rate 2 path/to/file - 以一半的速度播放聲音文件: afplay --rate 0.5 path/to/file - 播放聲音文件的前 N 秒: afplay --time seconds path/to/file 你還可以使用 say 命令讓你的 Mac 說話: say "test" say -v Fred "Isn't it nice to have a computer that will talk to you?"

如何從 macOS 的視窗截圖中移除陰影

我經常為我的部落格文章或課程截取大量截圖。 我通常使用 cmd-shift-4 來截取整個應用程序視窗,然後按下空格鍵。 就像這樣: macOS 預設會添加一個陰影,使其看起來很漂亮。 如果你想要移除陰影,可以在終端中使用以下命令: defaults write com.apple.screencapture disable-shadow -bool true ; killall SystemUIServer 以下是移除陰影後的同一截圖: 如果想要恢復陰影,可以使用以下命令: defaults write com.apple.screencapture disable-shadow -bool false ; killall SystemUIServer

如何從 MIME 類型在 Node.js 中獲取文件擴展名

我通過表單傳送了一個文件,在使用 multipart/form-data 的表單之後,我在服務器端的 req.files 中得到了文件對象。 這給我提供了一些信息,例如路徑、名稱、大小、類型等: { logo: File { size: 121920, path: '/var/folders/tn/h8lfq1sj7c33c0p30qgkd3mw0000gn/T/upload_b9e85b7cf989482a1760d82b77fd555a', name: 'Screen Shot 2021-06-07 at 21.40.29.png', type: 'image/png', hash: null, lastModifiedDate: 2021-06-07T22:20:50.150Z, //... } } 請注意,臨時文件路徑沒有擴展名。 如果在服務器端使用文件名沒有問題。但是我想要更改它並使用自己的命名慣例,所以我只需要文件的擴展名。 要獲取它,你可以做兩件事:解析文件名, const path = require('path') path.extname(req.files.logo.name) //.png 這不需要任何第三方庫。 或者你可以使用 mime-types 套件並查看 MIME 類型: const mime = require('mime-types') mime.extension('text/plain') //txt mime.extension('image/png') //png

如何從 MongoDB 集合中刪除所有項目

在使用 MongoDB 時,你可能需要從集合中刪除所有項目。 你可以通過調用集合的 deleteMany 方法並傳入一個空對象來實現。 像這樣: yourcollection.deleteMany({}) 下面是一個完整的示例: const mongo = require('mongodb').MongoClient const url = 'mongodb://localhost:27017' let db, jobs mongo.connect( url, { useNewUrlParser: true, useUnifiedTopology: true }, (err, client) => { if (err) { console.error(err) return } db = client.db('jobs') jobs = db.collection('jobs') jobs.deleteMany({}) } )

如何從 Netlify 函數返回 HTML

不使用 return { statusCode: 200, body: '測試', } 而是使用 return { statusCode: 200, headers: { 'Content-type': 'text/html; charset=UTF-8', }, body: '<body style="background-color: black;"><h2 style="color: white; padding-top:200px; text-align: center; font-family: system-ui">測試</h2></body>', }

如何從 Node.js 上傳文件到 S3

我有一個簡單的使用案例。 我正在建立一個工作看板,現在是建立提交新工作職位的表單的時候了。 招聘人員可以輸入公司詳細資料、職位詳細資料和公司標誌圖片。 數據存儲在數據庫中,起初我試圖將標誌存儲在數據庫中,但過了一段時間,我意識到儘管在技術上是可行的,但在存儲二進制數據方面存在一些問題,而且任務需要花費太長的時間。因此,我決定將其上傳到 S3。 S3是AWS提供的一個出色的服務。由於我已經在其他方面使用AWS,添加S3存儲桶很容易。 所以我去創建了一個S3存儲桶。 我已經有了一個AWS帳戶。如果您沒有,請從這裡開始: https://aws.amazon.com。 一旦設置好帳戶,請在AWS中創建一個IAM用戶。登錄AWS,點擊頂部的您的名稱,然後點擊“我的安全憑證”。 在側邊欄中點擊“用戶”和“添加用戶”。啟用“編程訪問。” 通過頁面底部的按鈕(“下一步: 權限”)來轉到下一個屏幕。 點擊“直接附加現有策略”: 在過濾器中輸入“S3”以顯示S3策略 選擇AmazonS3FullAccess權限: 用戶創建完成後,您將獲得一對訪問密鑰ID和安全訪問密鑰。將其複製到您的項目中的.env文件中,或者存儲在某個地方以便以後使用。 接下來,進入S3並創建一個存儲桶。從S3首頁https://s3.console.aws.amazon.com點擊“創建存儲桶”按鈕。 設置一個名稱,選擇一個AWS區域,禁用“阻止所有公共訪問”(我們將在另一篇文章中討論權限),然後點擊頁面底部的“創建存儲桶”按鈕。 完成!現在是深入研究Node.js的時候了。我在Next.js中在API調用中使用這段代碼。 首先使用npm install aws-sdk安裝aws-sdk包。 如前所述,將您的AWS訪問代碼存儲在.env中: AWS_ACCESS_KEY_ID=<訪問密鑰> AWS_SECRET_ACCESS_KEY=<安全訪問密鑰> AWS_BUCKET_NAME=<存儲桶名稱> 在頂部添加 import AWS from 'aws-sdk' 然後使用以下代碼初始化s3對象: const s3 = new AWS.S3({ accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY }) 現在,當您想要上傳文件時,從存儲中加載它: const filename = '文件名' const fileContent = fs.readFileSync(fileName) const params = { Bucket: process.env.AWS_BUCKET_NAME, Key: `${filename}.jpg`, Body: fileContent } s3.upload(params, (err, data) => { if (err) { reject(err) } resolve(data....

如何從 Node.js 使用 Redis

在 Node.js 應用程式中,使用 Redis 伺服器最受歡迎的庫之一是 node-redis,它可以在 https://github.com/NodeRedis/node-redis 找到。 在您的專案中安裝該庫: npm install redis 提示:如果專案是全新的並且還沒有 package.json 檔案,請先執行 npm init -y。 連接到 Redis 實例 安裝完庫之後,使用以下程式碼在您的專案中引入它: const redis = require('redis') 或者 import redis from 'redis' 獲取 redis 物件之後,使用以下程式碼創建一個新的客戶端: const client = redis.createClient({ url: 'redis://YOUR REDIS INSTANCE URL' }) 然後使用以下程式碼連接到 Redis(在 async 函數中執行): await client.connect() 當您獲得了客戶端之後,就可以執行 Redis 可以做的所有操作。 要關閉連接,請調用: client.quit() 存儲和檢索鍵值 使用 set() 將鍵值對存儲到 Redis 中: client.set("<key>", "<value>") 例如: client.set("name", "Flavio") client.set("age", 37) 如果在乾淨的 Redis 伺服器上運行 redis-cli 中的 KEYS * 命令,您將看到這兩個鍵:...