我试图比较json_str1和json_str2,这里它应该返回true,因为json_str1中的所有元素都存在于json_str2中.
就目前而言,我这样做很长
json_str1 = '{"0":"a","1":"b","2":"c"}';
json_str2 = '{"0":"c","1":"b","2":"a"}';
json_obj1 = $.parseJSON(json_str1);
json_obj2 = $.parseJSON(json_str2);
arr1 = $.map(json_obj1, function(el) { return el });
arr2 = $.map(json_obj2, function(el) { return el });
if($(arr1).not(arr2).length === 0 && $(arr2).not(arr1).length === 0)
alert("equal");
else
alert("not equal");
Run Code Online (Sandbox Code Playgroud)
如何在不将对象转换为数组的情况下使其简洁明了?
我在Javascript中有两个目前看起来像这样的数组,但是由HTTP请求(节点)更新:
var x = [[292,"2349","902103","9"],[3289,"93829","092","920238"]]
var y = [[292,"2349","902103","9"],[322,"93829","092","920238"],[924,"9320","8932","4329"]]
Run Code Online (Sandbox Code Playgroud)
我想比较这些数组,这样,如果y内部的数组不在x中,它将被保存到一个新数组 - z.请注意,有时数组内部数组的顺序会发生变化,但我不希望这会影响结果.
但是,如果x内部的数组不在y中,则不应保存到z.
我读了JavaScript数组差异,并且能够复制它,但是如果x数组没有显示y,则打印到z.我想知道是否有可能不存储,只有不同的项目y?
为什么以下行在falseJavascript中返回:
[[1,2,3], [1,2,4]].includes([1,2,3]);
Run Code Online (Sandbox Code Playgroud)
这背后的基本逻辑是什么?
我正在寻找一种有效的方法来查明两个数组是否包含相同数量的相等元素(在==某种意义上),以任何顺序:
foo = {/*some object*/}
bar = {/*some other object*/}
a = [1,2,foo,2,bar,2]
b = [bar,2,2,2,foo,1]
sameElements(a, b) --> true
Run Code Online (Sandbox Code Playgroud)
PS.请注意,线程中的每个解决方案都使用===而不是==用于比较.这对我的需求很好.
我想做一个类似的简单断言
knownArray.should.include('known value')
Run Code Online (Sandbox Code Playgroud)
数组是正确的,但我根本无法弄清楚用于检查数组是否具有此值的正确断言(索引无关紧要).我也试过,should.contain但这两个都抛出一个错误Object #<Assertion> has no method 'contain'(或'include')
如何检查数组是否包含使用的元素should?
我有两个数组,我如何比较单发的两个数组.
var arr1= ["a","b","c"];
var arr2 = ["a","c","d"]
if(arr1 == arr2){
console.log(true);
}else{
console.log(false);
}
Run Code Online (Sandbox Code Playgroud) 我们如何断言ES6地图和集合的平等?
例如:
// ES6 Map
var m1 = new Map();
m1.set('one', 1);
var m2 = new Map();
m2.set('two', 2);
assert.deepEqual(m1,m2); // outputs: passed.
// ES6 Set
var s1 = new Set();
s1.add(1);
var s2 = new Set();
s2.add(2);
assert.deepEqual(s1,s2); // outputs: passed.
Run Code Online (Sandbox Code Playgroud)
目的是断言集合/映射的元素是相等的.这两个断言都应该失败.
是否有deepEqual套装/地图的等价物?换句话说,如果没有手动迭代元素,我们如何深入测试Set/Map的平等?
如果在QUnit中没有办法,是否有适用于ES6套件和地图的单元测试工具?
编辑
在支持的Firefox中,Array.from()我一直在通过以下方式比较集合和映射:
assert.deepEqual(Array.from(m1), Array.from(m2));
Run Code Online (Sandbox Code Playgroud)
但这不适用于其他不支持的浏览器Array.from().即使使用Array.frompolyfill,Chrome/IE也不起作用 - Array.from(set)无论设置内容如何,总是会产生一个空数组.这可能是由于这些浏览器缺乏对通用迭代的支持.
其次,将其减少为数组的比较可能并不总是合适的.我们最终会得到我认为是误报的结果:
var s = new Set();
s.add([1,2]);
var m = new Map();
m.set(1,2);
assert.deepEqual(Array.from(s), Array.from(m)); // outputs: passed.
Run Code Online (Sandbox Code Playgroud)
更新 …
我想看看两个字符串数组是否相等。
例如:
compare(["abc", "def"], ["def", "abc"])
应该返回true并且类似地,
compare(["abc", "def"], ["def", "ghi"])
Run Code Online (Sandbox Code Playgroud)
应该返回false。
做这个的最好方式是什么?
试图使用TypeScript弄湿我的脚,但我一直遇到麻烦。今天,一个旧功能浮出水面,并且作为练习,我很好奇是否可以将其转换为TypeScript。到目前为止,颈部已经完全疼痛。
declare type Ord = number | string;
// type signature for f sucks really bad
// (f: Ord => Ord => boolean) would be really nice, if possible
// but instead I have to give names (_) for the parameters? dumb
const arrayCompare = (f: (_: Ord) => (_: Ord) => boolean) => ([x,...xs]: Ord[]) => ([y,...ys]: Ord[]): boolean => {
if (x === undefined && y === undefined)
return true;
else if …Run Code Online (Sandbox Code Playgroud) 输入:
[[-1,-1,2],[-1,0,1],[-1,-1,2],[-1,0,1],[-1,-1,2],[-1,0,1],[-1,0,1]]
Run Code Online (Sandbox Code Playgroud)
我想要的输出:
[[-1,-1,2],[-1,0,1]]
Run Code Online (Sandbox Code Playgroud)
任何其他的想法,除了这一个?
谢谢
javascript ×8
arrays ×6
node.js ×2
compare ×1
ecmascript-6 ×1
json ×1
mocha.js ×1
qunit ×1
should.js ×1
typescript ×1
unit-testing ×1