如何在 javascript 中使用下划线将 value/data 中的对象 value/data 小写为 HTML5 文档
how can i lowercase object value/data in javascript using underscore for HTML5 document
我有一个对象数组(arr
),每个对象有3个属性(Department, Categories, ProductTypes)
,这些属性的值是上和小写。我创建了一个 arr
的重复数组并将其命名为 arr2
。我需要在 arr
和搜索过滤器(已经小写)之间进行比较,因此它 returns 一个对象数组返回匹配条件并分配给 arr
使用:
arr=_.where(arr2,filter);
所以我想遍历 arr2
并将这里的所有内容小写,如下所示:
_.each( arr2, function(item){ //loop around each item in arr2
_.each( item, function(properties){ //loop around each property in item
properties=properties.toLowerCase();
console.log("Item: ",item,"ID: ",properties);
});
});
但是我在 chrome 中得到以下输出:
Default1.html:109 Item: Object {Departments: "Dep1", Categories: "Cat1", ProductTypes: "Prod1"} ID: dep1
Default1.html:109 Item: Object {Departments: "Dep1", Categories: "Cat1", ProductTypes: "Prod1"} ID: cat1
Default1.html:109 Item: Object {Departments: "Dep1", Categories: "Cat1", ProductTypes: "Prod1"} ID: prod1
如何将“Dep1/Cat1/Prod1
”值更改为小写?
原因是当您使用 for each
或 for in
循环时,您会得到临时变量,它们是原始变量的副本,更改将仅应用于副本。
这是工作代码:
arr2 = [{ObjectCategories: "Cat1", Departments: "Dep1", ProductTypes: "Prod1"}]
for (var i =0 ; i<arr2.length; i++){
for (var key in arr2[i]){
if (key === undefined || arr2[i][key] === undefined) {
continue;
}
console.log(key)
console.log(arr2[i][key])
arr2[i][key] = arr2[i][key].toLowerCase();
};
};
console.log(arr2[0])
为了比较,下面的代码不会起作用:
arr2 = [{ObjectCategories: "Cat1", Departments: "Dep1", ProductTypes: "Prod1"}]
for (var item in arr2){
for (var key in item){
if (key === undefined || item[key] === undefined) {
continue;
}
console.log(key)
console.log(item[key])
item[key] = item[key].toLowerCase();
};
};
console.log(arr2[0])
您可能会发现 this 有趣。
通过一些实验我设法解决了这个问题,我的最终代码片段:
var arr2 = [];
_.each( arr, function(item){ //loop around each item in arr
_.each( item, function(properties, id){ //loop around each property in item
if (filter[id] == (item[id].toLowerCase())) {
arr2.push( item );
}
});
});
基本上 arr2
最初声明为空,我通过每个项目对象的下划线遍历 arr
,然后遍历项目对象中的每个属性。然后我可以检查搜索过滤器变量(已经是小写)是否等于项目的小写 属性 值,如果是,则将项目对象添加到 arr2
对象数组。简单!
在下划线中可能会有一个更短的函数来进一步整理它。
我有一个对象数组(arr
),每个对象有3个属性(Department, Categories, ProductTypes)
,这些属性的值是上和小写。我创建了一个 arr
的重复数组并将其命名为 arr2
。我需要在 arr
和搜索过滤器(已经小写)之间进行比较,因此它 returns 一个对象数组返回匹配条件并分配给 arr
使用:
arr=_.where(arr2,filter);
所以我想遍历 arr2
并将这里的所有内容小写,如下所示:
_.each( arr2, function(item){ //loop around each item in arr2
_.each( item, function(properties){ //loop around each property in item
properties=properties.toLowerCase();
console.log("Item: ",item,"ID: ",properties);
});
});
但是我在 chrome 中得到以下输出:
Default1.html:109 Item: Object {Departments: "Dep1", Categories: "Cat1", ProductTypes: "Prod1"} ID: dep1
Default1.html:109 Item: Object {Departments: "Dep1", Categories: "Cat1", ProductTypes: "Prod1"} ID: cat1
Default1.html:109 Item: Object {Departments: "Dep1", Categories: "Cat1", ProductTypes: "Prod1"} ID: prod1
如何将“Dep1/Cat1/Prod1
”值更改为小写?
原因是当您使用 for each
或 for in
循环时,您会得到临时变量,它们是原始变量的副本,更改将仅应用于副本。
这是工作代码:
arr2 = [{ObjectCategories: "Cat1", Departments: "Dep1", ProductTypes: "Prod1"}]
for (var i =0 ; i<arr2.length; i++){
for (var key in arr2[i]){
if (key === undefined || arr2[i][key] === undefined) {
continue;
}
console.log(key)
console.log(arr2[i][key])
arr2[i][key] = arr2[i][key].toLowerCase();
};
};
console.log(arr2[0])
为了比较,下面的代码不会起作用:
arr2 = [{ObjectCategories: "Cat1", Departments: "Dep1", ProductTypes: "Prod1"}]
for (var item in arr2){
for (var key in item){
if (key === undefined || item[key] === undefined) {
continue;
}
console.log(key)
console.log(item[key])
item[key] = item[key].toLowerCase();
};
};
console.log(arr2[0])
您可能会发现 this 有趣。
通过一些实验我设法解决了这个问题,我的最终代码片段:
var arr2 = [];
_.each( arr, function(item){ //loop around each item in arr
_.each( item, function(properties, id){ //loop around each property in item
if (filter[id] == (item[id].toLowerCase())) {
arr2.push( item );
}
});
});
基本上 arr2
最初声明为空,我通过每个项目对象的下划线遍历 arr
,然后遍历项目对象中的每个属性。然后我可以检查搜索过滤器变量(已经是小写)是否等于项目的小写 属性 值,如果是,则将项目对象添加到 arr2
对象数组。简单!
在下划线中可能会有一个更短的函数来进一步整理它。