相关疑难解决方法(0)

为什么两个相同的物体彼此不相等?

看起来像下面的代码应该返回一个true,但它返回false.

var a = {};
var b = {};

console.log(a==b); //returns false
console.log(a===b); //returns false
Run Code Online (Sandbox Code Playgroud)

这有什么意义?

javascript

39
推荐指数
4
解决办法
2万
查看次数

如何确定性地验证JSON对象是否未被修改?

根据JSON.stringify的MDN文档:

不保证非数组对象的属性按任何特定顺序进行字符串化.不要依赖于字符串化内同一对象内的属性排序.

我曾希望通过缓存对象的字符串化版本来确定对象是否已更改,然后将其与随后的字符串化对象版本进行比较.这似乎比递归迭代对象并进行比较要简单得多.问题是因为JSON.stringify函数不是确定性的,所以当我对同一个对象进行字符串化时,我可以在技术上得到一个不同的字符串.

我还有其他选择吗?或者我是否必须编写令人讨厌的比较函数来确定对象相等性?

javascript json

37
推荐指数
3
解决办法
9084
查看次数

比较JavaScript中的对象

我有这个代码:

var object1 = {same:'test'}
var object2 = {same:'test'};       
console.log(object1 === object2)
Run Code Online (Sandbox Code Playgroud)

它在控制台中返回false.

我也有这个代码:

var object1 = {same:'test'}
var object2 = object1;
console.log(object1 === object2)  
Run Code Online (Sandbox Code Playgroud)

它在控制台中返回true.

我知道'==='是一个相等运算符,但我不知道它是如何在对象上运行的.

为什么第一个示例返回false?

javascript

32
推荐指数
4
解决办法
2354
查看次数

Javascript数组原语是什么?字符串?对象?

数组只是伪装成对象吗?为什么/为什么不呢?他们以什么方式(这样/不是)?

我一直认为JS中的数组和对象基本相同,主要是因为访问它们是相同的.

var obj = {'I': 'me'};
var arr = new Array();
arr['you'] = 'them';

console.log(obj.I);
console.log(arr.you);
console.log(obj['I']);
console.log(arr['you']);
Run Code Online (Sandbox Code Playgroud)

我误导/错误/错误吗?关于JS文字,基元和字符串/对象/数组/等,我需要了解什么?

数组/对象是伪装的字符串吗?为什么/为什么不呢?他们以什么方式(这样/不是)?

javascript arrays javascript-objects

23
推荐指数
4
解决办法
1万
查看次数

对象/数组的深度比较

可能重复:
如何确定两个JavaScript对象的相等性?
JavaScript中的对象比较

如果我有两个数组或对象并想要比较它们,例如

object1 = [
 { shoes:
   [ 'loafer', 'penny' ]
  },
  { beers:
     [ 'budweiser', 'busch' ]
  }
]

object2 = [
 { shoes:
   [ 'loafer', 'penny' ]
  },
  { beers:
     [ 'budweiser', 'busch' ]
  }
]

object1 == object2 // false
Run Code Online (Sandbox Code Playgroud)

如果您从服务器获得响应并尝试查看它是否已更改,这可能会很烦人

javascript arrays comparison object

22
推荐指数
1
解决办法
4万
查看次数

角度2中的angular.equals的等价物

我正在研究角度1项目到角度2的迁移.在angular 1项目中,我使用angular.equals进行对象比较angular.equals($ctrl.obj1, $ctrl.newObj);,我在线搜索了角度2中的等效方法,但找不到任何匹配的结果.

object angularjs typescript angular

22
推荐指数
4
解决办法
3万
查看次数

如何比较两个JSON具有相同的属性没有顺序?

我试图比较这两个JSON对象:

<input type="hidden" id="remoteJSON" name="remoteJSON" value='{"allowExternalMembers": "false", "whoCanJoin": "CAN_REQUEST_TO_JOIN"}' /><br />
<input type="hidden" id="localJSON" name="localJSON" value='{"whoCanJoin": "CAN_REQUEST_TO_JOIN", "allowExternalMembers": "false"}' /><br />
Run Code Online (Sandbox Code Playgroud)

我用javascript得到了值,我试着用它来比较:JSON.stringify(remoteJSON) == JSON.stringify(localJSON)但是这返回false:看起来属性的顺序很重要.

我甚至尝试与这个解决方案进行深入比较,总是得到错误的回报.

是否有一种快速的方法来解决jQuery的问题(​​即用于比较JSON的库)?

javascript jquery json

20
推荐指数
3
解决办法
6万
查看次数

反应useEffect比较对象

我正在使用react useEffect挂钩并检查对象是否已更改,然后才再次运行挂钩。

我的代码如下所示。

const useExample = (apiOptions) => {
    const [data, updateData] = useState([]);
    useEffect(() => {
       const [data, updateData] = useState<any>([]);
        doSomethingCool(apiOptions).then(res => {               
           updateData(response.data);
       })
    }, [apiOptions]);

    return {
        data
    };
};
Run Code Online (Sandbox Code Playgroud)

不幸的是,由于对象未被识别为相同对象,因此它一直在运行。

我相信以下是一个示例。

const useExample = (apiOptions) => {
    const [data, updateData] = useState([]);
    useEffect(() => {
       const [data, updateData] = useState<any>([]);
        doSomethingCool(apiOptions).then(res => {               
           updateData(response.data);
       })
    }, [apiOptions]);

    return {
        data
    };
};
Run Code Online (Sandbox Code Playgroud)

也许运行的JSON.stringify(apiOptions)作品?

javascript reactjs react-hooks

19
推荐指数
4
解决办法
9789
查看次数

如何检查一个JavaScript对象中的值是否存在于另一个JavaScript对象中?

我试图比较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)

如何在不将对象转换为数组的情况下使其简洁明了?

https://jsfiddle.net/kq9gtdr0/

javascript arrays json

14
推荐指数
1
解决办法
4996
查看次数

为什么JavaScript中的[] == []为false?

我正在编写代码的一部分,我有一个看起来像的数组[[data]].将data通过Django的模板引擎渲染在服务器端.所以我的代码看起来像这样:

var data = {{ series|safe }}; 
// data will be [[]] if no data is present
if (data ==[[]])
  console.log('no data');
Run Code Online (Sandbox Code Playgroud)

if始终返回false.这意味着在[[]] == [[]],false而我的测试表明[]==[]也是false如此.

任何描述将不胜感激.

javascript operators comparison-operators

10
推荐指数
3
解决办法
3474
查看次数