如何在 JavaScript 中使用 HTML5 文档的下划线小写对象值/数据

how can i lowercase object value/data in javascript using underscore for HTML5 document

本文关键字:下划线 对象 数据 文档 JavaScript HTML5      更新时间:2023-09-26

我有一个对象数组(arr),每个对象有3个属性(Department, Categories, ProductTypes),这些属性的值是大写和小写的混合。我创建了一个重复的arr数组并将其命名为 arr2 。我需要在arr和搜索过滤器(已经是小写)之间进行比较,以便它返回具有匹配条件的对象数组,并使用以下命令分配给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 eachfor 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])

你可能会觉得这很有趣。

通过一些实验,我设法解决了这个问题,我的最终代码片段:

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对象数组中。简单!

下划线中可能有一个更短的函数来进一步整理它。