【发布时间】:2021-04-14 01:59:30
【问题描述】:
目前,我已经序列化了一个在加载页面时定义的表单数组 (initial_form_array)。更改表单字段后,我创建了一个新的表单序列化数组 (updated_form_array)。在进行表单的下一步之前,我解析初始数组并将其与更改后的表单数组进行比较,以查明哪个值已更改。为此,我以下列方式使用$.inArray:
if(initial_form_array != updated_form_array){
$.each( updated_form_array, function( key, value ) {
var name = value['name'],
value = value['value'];
var comparison_value = $.inArray( value, initial_form_array );
if( comparison_value == -1 ) {
console.log( "found an edit" );
}
}
}
所以在上面的例子中你可以看到,当found an edit 语句被记录到控制台时,这是因为初始表单数组中不存在该值。问题是这只是检查值是否在初始数组中。因此,如果值已从 123 更改为仅 23,它将不会到达 found an edit 位置,因为 23 在 123 内。
在这种情况下,有没有更好的方法来做到这一点?如果这是一个很好的方法,有没有办法进一步澄清比较是为了精确匹配,而不是仅仅确定值匹配是否在数组中?
【问题讨论】:
-
$.inArray不应该为部分匹配返回 true。有什么例子吗? -
如果初始表单数组是相同结构的对象
{name:'foo', value:123}这种匹配方法将不起作用。将使用$.inArray将原始值与整个对象进行比较
标签: jquery arrays compare key-value