【问题标题】:Filter object props based on the specified array根据指定数组过滤对象道具
【发布时间】:2023-03-31 11:39:01
【问题描述】:

我有一个具有以下结构的对象

{ cardControlItem: 'Tidak',
  cardDirectUseItem: 'Tidak',
  kbUnspscUuid: '6a564b8e-2976-4fde-8759-7951970d7500',
  substoreUuid: '2f2b04bb-8b80-4b1f-b827-bf20311e31ee',
  cardDetailMin: 654,
  cardDetailMax: 65,
  cardDetailIncrement: 754,
  cardDetailPriceOverall: 4534,
  cardDetailPriceUnit: 0,
  ltMeasurementMinUuid: 'fddca37a-d0a3-40a4-8537-e84375b01601',
  ltMeasurementMaxUuid: '2bc6d7d2-5167-4459-9910-a65839008afd' }

我有一个数组中的键列表

['cardControlItem', 'cardDirectUseItem', 'kbUnspscUuid', 'substoreUuid', 'stockCardGroupUuid', 'stockCardBatchUuid']

如何根据指定的数组进行减法

预期输出:

{ cardControlItem: 'Tidak',
  cardDirectUseItem: 'Tidak',
  kbUnspscUuid: '6a564b8e-2976-4fde-8759-7951970d7500',
  substoreUuid: '2f2b04bb-8b80-4b1f-b827-bf20311e31ee' }

P.S:我花了 3 个小时在 StackOverflow 上找到了类似的问题。这类问题的正确标题是什么:D

【问题讨论】:

    标签: javascript ecmascript-6


    【解决方案1】:
     const filter = (obj, arr) => Object.assign(...arr.map(el => ({[el]: obj[el]})));
    

    这样就可以了

    const result = filter({a:1, b:2, c:3}, ["a", "b"]);
    

    【讨论】:

      【解决方案2】:

      试试这个解决方案。我正在过滤objfilter 部分)中的属性,然后遍历存在的属性(reduce 部分)并将属性值分配给新对象(acc)。

      const obj = { 
         cardControlItem: 'Tidak',
         cardDirectUseItem: 'Tidak',
         kbUnspscUuid: '6a564b8e-2976-4fde-8759-7951970d7500',
         substoreUuid: '2f2b04bb-8b80-4b1f-b827-bf20311e31ee',
         cardDetailMin: 654,
         cardDetailMax: 65,
         cardDetailIncrement: 754,
         cardDetailPriceOverall: 4534,
         cardDetailPriceUnit: 0,
         ltMeasurementMinUuid: 'fddca37a-d0a3-40a4-8537-e84375b01601',
         ltMeasurementMaxUuid: '2bc6d7d2-5167-4459-9910-a65839008afd' 
      };
      
      const keys = ['cardControlItem', 'cardDirectUseItem', 'kbUnspscUuid', 'substoreUuid', 'stockCardGroupUuid', 'stockCardBatchUuid'];
      
      const mapped = keys.filter(key => obj.hasOwnProperty(key))
                         .reduce((acc, key) => { acc[key] = obj[key]; return acc }, {});
      
      console.log(mapped);

      【讨论】:

      • 解释您的解决方案可能对未来的访问者有所帮助。
      【解决方案3】:

      .循环遍历数组并检查对象是否具有此键,如果是,则使用此键创建一个新对象,而不是改变原始对象

      var orgObject = {
        cardControlItem: 'Tidak',
        cardDirectUseItem: 'Tidak',
        kbUnspscUuid: '6a564b8e-2976-4fde-8759-7951970d7500',
        substoreUuid: '2f2b04bb-8b80-4b1f-b827-bf20311e31ee',
        cardDetailMin: 654,
        cardDetailMax: 65,
        cardDetailIncrement: 754,
        cardDetailPriceOverall: 4534,
        cardDetailPriceUnit: 0,
        ltMeasurementMinUuid: 'fddca37a-d0a3-40a4-8537-e84375b01601',
        ltMeasurementMaxUuid: '2bc6d7d2-5167-4459-9910-a65839008afd'
      }
      
      
      var keys = ['cardControlItem', 'cardDirectUseItem', 'kbUnspscUuid', 'substoreUuid', 'stockCardGroupUuid', 'stockCardBatchUuid']
      
      var newObj = {};
      keys.forEach(function(item) {
        if (orgObject.hasOwnProperty(item)) {
          newObj[item] = orgObject[item]
      
        }
      
      })
      
      console.log(newObj)

      【讨论】:

        【解决方案4】:

        var data = { cardControlItem: 'Tidak',
          cardDirectUseItem: 'Tidak',
          kbUnspscUuid: '6a564b8e-2976-4fde-8759-7951970d7500',
          substoreUuid: '2f2b04bb-8b80-4b1f-b827-bf20311e31ee',
          cardDetailMin: 654,
          cardDetailMax: 65,
          cardDetailIncrement: 754,
          cardDetailPriceOverall: 4534,
          cardDetailPriceUnit: 0,
          ltMeasurementMinUuid: 'fddca37a-d0a3-40a4-8537-e84375b01601',
          ltMeasurementMaxUuid: '2bc6d7d2-5167-4459-9910-a65839008afd' };
          
         var keys = ['cardControlItem', 'cardDirectUseItem', 'kbUnspscUuid', 'substoreUuid', 'stockCardGroupUuid', 'stockCardBatchUuid'];
         
         var new_data = {};
         for(var i = 0; i < keys.length; i++){
          if(data.hasOwnProperty(keys[i])){
            new_data[keys[i]] = data[keys[i]];
          }
         }
         
         console.log(new_data);

        【讨论】:

          【解决方案5】:

          试试这个sn-p

          let obj = { cardControlItem: 'Tidak',
            cardDirectUseItem: 'Tidak',
            kbUnspscUuid: '6a564b8e-2976-4fde-8759-7951970d7500',
            substoreUuid: '2f2b04bb-8b80-4b1f-b827-bf20311e31ee',
            cardDetailMin: 654,
            cardDetailMax: 65,
            cardDetailIncrement: 754,
            cardDetailPriceOverall: 4534,
            cardDetailPriceUnit: 0,
            ltMeasurementMinUuid: 'fddca37a-d0a3-40a4-8537-e84375b01601',
            ltMeasurementMaxUuid: '2bc6d7d2-5167-4459-9910-a65839008afd' }
            
          let  comparator = ['cardControlItem', 'cardDirectUseItem', 'kbUnspscUuid', 'substoreUuid', 'stockCardGroupUuid', 'stockCardBatchUuid'];
            
            
           Object.keys(obj).map((key)=>{
            if(!comparator.includes(key)){
              delete obj[key]
            }
           })
           
           console.log(obj)

          输出 { car​​dControlItem:'Tidak', cardDirectUseItem: 'Tidak', kbUnspscUuid: '6a564b8e-2976-4fde-8759-7951970d7500', substoreUuid: '2f2b04bb-8b80-4b1f-b827-bf20311e31ee }

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-03-21
            • 2018-12-25
            • 2018-07-06
            • 1970-01-01
            • 2017-05-25
            • 2020-12-03
            • 2020-12-14
            相关资源
            最近更新 更多