js array.append方法
时间: 2023-07-07 13:39:56 浏览: 58
JavaScript中的Array并没有原生的append方法,但可以使用push方法向数组末尾添加一个或多个新元素。
示例代码:
```javascript
var arr = [1, 2, 3];
// 向数组末尾添加一个元素
arr.push(4);
console.log(arr); // [1, 2, 3, 4]
// 向数组末尾添加多个元素
arr.push(5, 6, 7);
console.log(arr); // [1, 2, 3, 4, 5, 6, 7]
```
这样就可以向数组末尾添加一个或多个元素。
相关问题
new formdata().append为什么要用forEach
在使用 `new FormData().append()` 方法时,可以传入多个键值对。如果只传入一个键值对,那么可以直接使用 `new FormData().append(key, value)` 的方式。但是如果传入多个键值对,就需要使用 `Array.forEach()` 方法来遍历这些键值对,然后逐一添加到 `FormData` 对象中。
例如:
```js
const formData = new FormData();
const data = [
{ key: 'name', value: 'John' },
{ key: 'age', value: 30 },
{ key: 'gender', value: 'male' }
];
data.forEach(item => {
formData.append(item.key, item.value);
});
```
这样就可以将多个键值对添加到 `FormData` 对象中了。因此,使用 `forEach` 可以方便地处理多个键值对的情况。
import { Sha256 } from '@aws-crypto/sha256-js' // 导入SHA256算法 import SparkMD5 from 'spark-md5' // 导入MD5算法 onmessage = async function (event) { const data = event.data // 获取文件数据 // chunk方式读取文件 const chunkSize = 1024 * 1024 // 每次读取1MB const fileSize = data.size // 文件大小 let offset = 0 // 偏移量 const hash = new Sha256() // 创建SHA256实例 const spark = new SparkMD5.ArrayBuffer() // 创建MD5实例 while (offset < fileSize) { const chunk = new Uint8Array(await data.slice(offset, offset + chunkSize).arrayBuffer()) // 读取文件块 hash.update(chunk) // 更新文件的SHA256值 spark.append(chunk) // 更新文件的MD5值 offset += chunkSize // 更新偏移量 // 计算进度 const progress = Math.min(100, Math.round((offset / fileSize) * 100)) console.log(progress + '%') // 打印进度 } const [sha256Uint8Array32, md5] = await Promise.all([ hash.digest(), // SHA256 Unit8Array(32) spark.end(), // MD5 ]) const hashArray = Array.from(new Uint8Array(sha256Uint8Array32)) const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('') const obj = { md5, // MD5 sha256: hashHex, // SHA256 Hex sha256Int8Array32: Array.from(new Int8Array(sha256Uint8Array32)), // SHA256 Int8Array(32) } console.log(obj) // 打印结果对象 postMessage(obj) // 将结果对象发送给主线程 } 这段代码有Bug 就是剩下的不够1M就不会算
是的,这段代码有一个Bug,即在最后一次读取文件块时,如果剩余的文件大小不到1MB,则不会计算SHA256和MD5值。
为了解决这个问题,我们可以在循环结束后,再读取一次剩余的文件块,并计算SHA256和MD5值。
以下是修复后的代码:
```
import { Sha256 } from '@aws-crypto/sha256-js'; // 导入SHA256算法
import SparkMD5 from 'spark-md5'; // 导入MD5算法
onmessage = async function (event) {
const data = event.data; // 获取文件数据
// chunk方式读取文件
const chunkSize = 1024 * 1024; // 每次读取1MB
const fileSize = data.size; // 文件大小
let offset = 0; // 偏移量
const hash = new Sha256(); // 创建SHA256实例
const spark = new SparkMD5.ArrayBuffer(); // 创建MD5实例
while (offset < fileSize) {
const chunk = new Uint8Array(await data.slice(offset, offset + chunkSize).arrayBuffer()); // 读取文件块
hash.update(chunk); // 更新文件的SHA256值
spark.append(chunk); // 更新文件的MD5值
offset += chunkSize; // 更新偏移量
// 计算进度
const progress = Math.min(100, Math.round((offset / fileSize) * 100));
console.log(progress + '%'); // 打印进度
}
// 读取剩余的文件块
if (offset < fileSize) {
const chunk = new Uint8Array(await data.slice(offset).arrayBuffer()); // 读取文件块
hash.update(chunk); // 更新文件的SHA256值
spark.append(chunk); // 更新文件的MD5值
}
const [sha256Uint8Array32, md5] = await Promise.all([
hash.digest(), // SHA256 Unit8Array(32)
spark.end(), // MD5
]);
const hashArray = Array.from(new Uint8Array(sha256Uint8Array32));
const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
const obj = {
md5, // MD5
sha256: hashHex, // SHA256 Hex
sha256Int8Array32: Array.from(new Int8Array(sha256Uint8Array32)), // SHA256 Int8Array(32)
};
console.log(obj); // 打印结果对象
postMessage(obj); // 将结果对象发送给主线程
}
```