javascript - toThrow 检查数组的不可更改性
问题描述
提示,如何检查数组?最终的结果是,测试应该检查数组是否发生了变化,如果是,则给出无法更改的错误。
import { List, Set } from "immutable"
export let list1: number[] = [1, 2, 3];
export function mass(list1) {
let listFromArray = List(list1);
if (listFromArray == List(list1)) {
throw new Error("immutable");
}
return listFromArray;
};
测试代码:
import {mass} from "./sum"
import { List, Set, isImmutable } from "immutable"
test('check for variability', () => {
const list1: number[] = [1, 2, 3];
const listFromArray = mass(list1);
const expectedResult = List([1, 2, 3]);
expect(expectedResult).toThrowError('Error');
});
解决方案
我认为您正在寻找数组比较。
对于那个场景,您可以比较数组中的项目..
有很多有用的方法可以做到这一点,其中一种是使用every方法:\
var arr_1 = [1,2,3];
var arr_2 = [1,2,3];
if(arr_1.every((v,i) => v === arr_2[i])){
alert("si");
}
else{
alert("no")
}
当然,这不是优化的,因为您可能想提前检查长度等以提前出局。
https://jsfiddle.net/tspqeyz3/
对于 immutable.js,有一个equals
方法可以检查值的映射。(NodeJS 示例)
const { Map, is } = require('immutable')
const map1 = Map({ a: 1, b: 2, c: 3 })
const map2 = Map({ a: 1, b: 2, c: 3 })
map1 !== map2 // two different instances are not reference-equal
map1.equals(map2) // but are value-equal if they have the same values
is(map1, map2) // alternatively can use the is() function
因此,在这种情况下,您应该能够确定两者的相等性。
推荐阅读
- sql-server - 是否可以使用 Ansible 部署 MS SQL 脚本?
- c# - 如何在会话活动期间阻止用户单击屏幕上的任何位置
- docker - 连接到 localhost:9090/v1/health 时出错
- elasticsearch - elasticsearch.exceptions.RequestError: RequestError(400, 'too_long_frame_exception', '一个 HTTP 行大于 4096 字节。')
- jdbc - Wildfly 集群 Clickhouse 数据源
- django - 如何在 AWS 中同时运行两个命令行?
- ruby - Xzing 仅在 Java 版本中识别 Barcode
- r - 如何将矩阵从矩阵列表转换为未列出的二维数字/矩阵而不展平为 R 中的向量?
- java - Recycler 没有显示我的图像:- E/RecyclerView:没有附加适配器;跳过布局
- python - 将输出打印到文件