如何获取具有相同值的两个对象,并将其视为一个对象
How to take two objects with the same values, and make it so that they are seen as one single object
我正在创建一个允许手动筛选的多选下拉组件。当项目第一次显示时,我正在循环浏览一组对象:
customers = [
{name: "Boe", city: "Scottsdale", state: "AZ", zip: 45454},
{name: "Tom", city: "Austin", state: "TX", zip: 34323}
]
如果用户在没有筛选的情况下从下拉列表中选择上述客户,则这是控制台中的对象:
Object {name: "Boe", city: "Scottsdale", state: "AZ", zip: 46545, $$hashkey: "object 71"}
当设置手动过滤器时,这允许用户键入的文本过滤下拉列表,并将其传递到组件外部。一个自定义过滤器的例子可能是这样的,它很可能从服务器中过滤一些内容,然后发回一个新的对象数组。例如,假设用户在输入中键入字母"b",则上面的数据将被过滤,在下拉列表中只显示"Boe",下面的匹配数组将只包含"Boe"
var matches = [];
for (var i = 0; i < unfilteredCustomers.length; i++) {
//filter it
}
//update the customers based on each letter that is typed
$scope.customers = matches;
然后将其传递回组件,如下所示:
<dropdown-select items="customers"></dropdown-select>
因此,最初,传入的客户是第一个客户阵列,一旦用户开始键入筛选,客户就会得到更新并返回到组件中。如果我过滤并选择已过滤的行,以下是控制台中显示的内容:
Object {name: "Boe", city: "Scottsdale", state: "AZ", zip: 46545, $$hashkey: "object 170"}
$$hashKey正在更改。我意识到我基本上是在一个新的数组中发回的,这个数组改变了对原始项集的引用。但问题是,该组件的功能是,如果用户进行筛选并做出选择,则下拉列表会返回到其原始项目。因此,我遇到的问题是,一旦用户选择了一个已筛选的项目,并且下拉列表重新打开,用户就可以再次选择相同的项目,因为"this.selectedItems.indexOf(selectedRow)===-1看不到已筛选的行与未筛选下拉列表而用户进行选择时相同。
我怎样才能让这两个物体被认为是完全相同的呢?
感谢
如果这些对象的所有值都是基元,则可以执行类似的操作
function areSameObjects(ob1, ob2){
var areSame = false;
if(Object.keys(ob1).length === Object.keys(ob2).length){
delete ob1.$$hashkey;
delete ob2.$$hashkey;
areSame = Object.keys(ob1).reduce(function(state, key){
state = Object.is(ob1[key],ob2[key]) && state;
return state;
}, true);
}
return areSame;
}
这不是语言级别的功能。相反,您必须检查值是否相等。Lodash有一个方法,可以递归地检查所有属性和值,看看是否所有内容都匹配https://lodash.com/docs#isEqual.
或者,您可以找到一种对对象进行散列的方法,或者只对两者进行JSON.stringify
并比较这些值。
- javascript函数,它接受两个输入:一个对象和一个键,并返回对象中该键的相应值
- 正在更新mongod中两个对象内部的数组
- 添加两个对象以获取值的总和
- 如何使用javascript合并两个对象数组
- 别名或以其他方式合并两个具有不同名称的相同对象原型
- 如何对两个嵌套对象进行排序
- 在JavaScript中相等两个对象.在更改一时,秒会自动更改
- js字符串转换为具有两个值的对象
- 如何使用AngularJs比较两个对象的JSON
- jQuery对象从html表中查询为两个一维数组,用于Chartist图表
- 交换对象上两个属性的值
- Backbone relational无法实例化两个RelationalModel对象
- 如何在javascript中合并两个对象数组
- 删除两个独立对象中的属性,而不使用多余的删除语句
- JavaScript - 合并两个对象数组并根据属性值删除重复数据
- 有可能让两个变量指向同一个对象吗?(javascript)
- 使用Javascript对象为具有两个背景图像的DIV设置样式时出现问题
- 如何在Javascript中连接两个结构不同的对象
- 如何使用jQuery合并两个json对象
- 如何按对象两个值对对象数组进行排序