【问题标题】:how to exclude only certain elements in json objects of array using for loop?如何使用for循环仅排除数组的json对象中的某些元素?
【发布时间】:2020-01-09 00:46:47
【问题描述】:

我想调用函数checkIsObjectEmptyOrNot 仅当所有“name”、“age”、“class”字段不为空时。如果所有这些(没有 id 和 book_id)值都为 null,则该函数应返回 false。 idbook_id 应该从这个过滤过程中排除,因为 idbook_id 总是从 Laravel 后端获得一些价值。

 checkIsObjectEmptyOrNot(object){

        for (var key in object) {
            if (key != 'id' && key != 'book_id' && key != null) {
                break;
                return true;
            }
        }
        return false;
    }

我有一个类似的 Json 数组,

[
    {
         "id": 1,
         "book_id": 2,
         "name": "myname",
         "age": 25,
         "class":null,
    },
    {
        "id": 2,
        "book_id": 2,
        "name": "myname2",
        "age": 25,
        "class": null,
    },
    {
        "id": 3,
        "book_id": 2,
        "name": "myname3",
        "age": 25,
        "class": 10,
    },
]

【问题讨论】:

    标签: javascript arrays json vue.js


    【解决方案1】:

    您可能不需要为此添加新功能。 Array.filter 可以胜任。请参见下面的 sn-p。将返回所有有效项目。

    const arr = [
     {
     "id":1,
     "book_id":2,
     "name":"myname",
     "age":25,
     "class":null,
     },
    {
     "id":2,
     "book_id":2,
     "name":"myname2",
     "age":25,
     "class":null,
     },
    {
     "id":3,
     "book_id":2,
     "name":"myname3",
     "age":25,
     "class":10,
     },
    ].filter((item)=>{
      return item.name && item.age && item.class
    })
    
    console.log(arr);

    但如果你需要一个功能,这可以是它

    const arr = [{
        "id": 1,
        "book_id": 2,
        "name": "myname",
        "age": 25,
        "class": null,
      },
      {
        "id": 2,
        "book_id": 2,
        "name": "myname2",
        "age": 25,
        "class": null,
      },
      {
        "id": 3,
        "book_id": 2,
        "name": "myname3",
        "age": 25,
        "class": 10,
      },
    ]
    
    function checkIsObjectEmptyOrNot(object) {
         for (var key in object) {
            if (key !== 'id' && key !== 'book_id' && object[key] !== null)
                return true;
        }
        return false;
    }
    
    console.log(checkIsObjectEmptyOrNot(arr[0]));
    console.log(checkIsObjectEmptyOrNot(arr[1]));
    console.log(checkIsObjectEmptyOrNot(arr[2]));

    如果所有nameageclass 不是nullundefinedfalsetrue,则返回true

    希望这会有所帮助:)

    【讨论】:

    • 问题是除了name、age和class之外还有更多的字段。每个对象都有 id 和 book_id。但其他字段可以为空或有值。我想要的是仅当除 id 和 book_id 之外的所有字段都为空时才调用上述函数。谢谢
    • @MadusankaBDissanayake 更新第二个 sn-p.. 这就是你需要的..
    • 这给了我与 checkIsObjectEmptyOrNot(object){ for (var key in object) { if (key != 'id' && key != 'book_id' && key != null) {休息;返回真; } } 返回假; }
    • OK 那么您的预期输出究竟是什么?
    • 此外,对于您提供的数组,它们都没有任何所有属性都为空的对象。所以它们都根据您的要求有效。并且在您正在检查的代码 sn-p key!= null 实际上会检查键是否为空,而不是它的值。在我的 sn-p 中,它检查值是否为空 object[key] !== null 希望这能澄清
    【解决方案2】:

    您可以尝试使用 forEach

        var arr = [
             {
             "id":1,
             "book_id":2,
             "name":"myname",
             "age":25,
             "class":null,
             },
            {
             "id":2,
             "book_id":2,
             "name":"myname2",
             "age":25,
             "class":null,
             },
            {
             "id":3,
             "book_id":2,
             "name":"myname3",
             "age":25,
             "class":10,
             },
            ]
             var flag = 0;
             arr.forEach(function(singleObject){
                for (let [key, value] of Object.entries(singleObject)) {
                    if(singleObject[key] != _id || singleObject[key] != book_id){
                        if(singleObject[key] != null){
                         flag = 1;
                        }
                    }   
    }
    });
       //if condition satisfies if all the value is null except _id and book_id
        if(flag == 0 ){
        //call function.
        checkIsObjectEmptyOrNot()
    
        }
    

    【讨论】:

    • 问题是除了name、age和class之外还有更多的字段。每个对象都有 id 和 book_id。但其他字段可以为空或有值。我想要的是仅当除 id 和 book_id 之外的所有字段都为空时才调用上述函数。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多