对象数组上的JavaScript过滤器

vsmadaxz  于 12个月前  发布在  Java
关注(0)|答案(3)|浏览(113)

我用这段代码来过滤属性值为true。过滤器值可以获取对象数组。但我需要第一个特征。

var filter = Service.filter(s => s.characteristics.find(c => c.properties?.write == true));

console.log(JSON.stringify(Service));
console.log(filter); // May get 1 or more characteristics

console.log(filter[0].uuid + ";;;" + filter[0].characteristics[0].uuid);

这里是一个演示与数据

var Service = [{
    "characteristics": [{
        "descriptors": [],
        "uuid": "2a00",
        "properties": {
          "write": false,
          "writeWithoutResponse": true,
          "read": true
        }
      },
      {
        "descriptors": [],
        "uuid": "2a01",
        "properties": {
          "read": true
        }
      },
      {
        "descriptors": [],
        "uuid": "2a02",
        "properties": {
          "read": true
        }
      },
      {
        "descriptors": [],
        "uuid": "2a03",
        "properties": {
          "write": false
        }
      },
      {
        "descriptors": [],
        "uuid": "2a04",
        "properties": {
          "read": true
        }
      }
    ],
    "uuid": "1800"
  },
  {
    "characteristics": [{
      "descriptors": [{
        "uuid": "2902"
      }],
      "uuid": "2a05",
      "properties": {
        "indicate": true
      }
    }],
    "uuid": "1801"
  },
  {
    "characteristics": [{
        "descriptors": [{
          "uuid": "2902"
        }],
        "uuid": "2a37",
        "properties": {
          "notify": true
        }
      },
      {
        "descriptors": [],
        "uuid": "2a38",
        "properties": {
          "read": true
        }
      }
    ],
    "uuid": "180d"
  },
  {
    "characteristics": [{
        "descriptors": [],
        "uuid": "2a23",
        "properties": {
          "read": true
        }
      },
      {
        "descriptors": [],
        "uuid": "2a24",
        "properties": {
          "read": true
        }
      },
      {
        "descriptors": [],
        "uuid": "2a25",
        "properties": {
          "read": true
        }
      },
      {
        "descriptors": [],
        "uuid": "2a26",
        "properties": {
          "read": true
        }
      },
      {
        "descriptors": [],
        "uuid": "2a27",
        "properties": {
          "read": true
        }
      },
      {
        "descriptors": [],
        "uuid": "2a28",
        "properties": {
          "read": true
        }
      },
      {
        "descriptors": [],
        "uuid": "2a29",
        "properties": {
          "read": true
        }
      }
    ],
    "uuid": "180a"
  },
  {
    "characteristics": [{
      "descriptors": [],
      "uuid": "2a19",
      "properties": {
        "read": true
      }
    }],
    "uuid": "180f"
  },
  {
    "characteristics": [{
        "descriptors": [],
        "uuid": "WrongID",
        "properties": {
          "read": true
        }
      },
      {
        "descriptors": [{
          "uuid": "2902"
        }],
        "uuid": "characteruuid",
        "properties": {
          "write": true,
          "indicate": true
        }
      }
    ],
    "uuid": "serviceuuid"
  }
];


var filter = Service.filter(s => s.characteristics.find(c => c.properties?.write == true));

console.log(JSON.stringify(Service));
console.log(filter); // May get 1 or more characteristics

console.log(filter[0].uuid + ";;;" + filter[0].characteristics[0].uuid);
Expected Output : serviceuuid ::: characteruuid
Current         : serviceuuid ::: WrongID
sqserrrh

sqserrrh1#

var Service =[{
     
      "characteristics": [
        {
          "descriptors": [

          ],
          "uuid": "2a00", 
          "properties": {
            "write": false,
            "writeWithoutResponse": true,
            "read": true
          }
        },
        {
          "descriptors": [

          ],
          "uuid": "2a01", 
          "properties": {
            "read": true
          }
        },
        {
          "descriptors": [

          ],
          "uuid": "2a02", 
          "properties": {
            "read": true
          }
        },
        {
          "descriptors": [

          ],
          "uuid": "2a03", 
          "properties": {
            "write": false
          }
        },
        {
          "descriptors": [

          ],
          "uuid": "2a04", 
          "properties": {
            "read": true
          }
        }
      ],
      "uuid": "1800" 
    },
    {
      "characteristics": [
        {
          "descriptors": [
            {
              "uuid": "2902"
            }
          ],
          "uuid": "2a05", 
          "properties": {
            "indicate": true
          }
        }
      ],
      "uuid": "1801"
    },
    {
      "characteristics": [
        {
          "descriptors": [
            {
              "uuid": "2902"
            }
          ],
          "uuid": "2a37",
          "properties": {
            "notify": true
          }
        },
        {
          "descriptors": [

          ],
          "uuid": "2a38",
          "properties": {
            "read": true
          }
        }
      ],
      "uuid": "180d" 
    },
    {
      "characteristics": [
        {
          "descriptors": [

          ],
          "uuid": "2a23", 
          "properties": {
            "read": true
          }
        },
        {
          "descriptors": [

          ],
          "uuid": "2a24", 
          "properties": {
            "read": true
          }
        },
        {
          "descriptors": [

          ],
          "uuid": "2a25", 
          "properties": {
            "read": true
          }
        },
        {
          "descriptors": [

          ],
          "uuid": "2a26",
          "properties": {
            "read": true
          }
        },
        {
          "descriptors": [

          ],
          "uuid": "2a27", 
          "properties": {
            "read": true
          }
        },
        {
          "descriptors": [

          ],
          "uuid": "2a28",
          "properties": {
            "read": true
          }
        },
        {
          "descriptors": [

          ],
          "uuid": "2a29", 
          "properties": {
            "read": true
          }
        }
      ],
      "uuid": "180a" 
    },
    {
      "characteristics": [
        {
          "descriptors": [

          ],
          "uuid": "2a19", 
          "properties": {
            "read": true
          }
        }
      ],
      "uuid": "180f" 
    },
    {
      "characteristics": [
        {
          "descriptors": [

          ],
          "uuid": "WrongID",
          "properties": {
            "read": true
          }
        },
        {
          "descriptors": [
            {
              "uuid": "2902"
            }
          ],
          "uuid": "characteruuid",
          "properties": {
            "write": true,
            "indicate": true
          }
        }
      ],
      "uuid": "serviceuuid"
    }
  ];

var filter = Service.find(service =>
  service.characteristics.some(characteristic => characteristic.properties?.write === true)
);

if (filter) {
  var firstCharacteristic = filter.characteristics.find(characteristic => characteristic.properties?.write === true);
  console.log(filter.uuid + " ::: " + firstCharacteristic.uuid);
} else {
  console.log("No matching service found.");
}

//you can also try this solution 

/*

const filter = Service.find(service => {
  const firstCharacteristic = service.characteristics.find(
characteristic => characteristic.properties?.write === true
  );
  if (firstCharacteristic) {
console.log(service.uuid + " ::: " + firstCharacteristic.uuid);
return true; // Stop searching after the first match
  }
  return false; // Continue searching
});

if (!filter) {
  console.log("No matching service found.");
}

*/
vkc1a9a2

vkc1a9a22#

如果你想得到每个服务的第一个特征uuid

let stats = {};
for (const service of Service) {
  const { uuid, characteristics } = service;
  const characteristicFound = characteristics.find(
    characteristic => characteristic?.properties?.write === true
  );
  stats[uuid] = characteristicFound?.uuid;
}

console.log(stats);
// result: 
{
  '1800': null,
  '1801': null,
  '180d': null,
  '180a': null,
  '180f': null,
  serviceuuid: 'characteruuid'
}
ymzxtsji

ymzxtsji3#

var filter=Service.find(s=>s.characteristics.some(c=>c.properties?.write==true));
console.log ( JSON.stringify(Service));  
console.log(filter);  // May get 1 or more characteristics

console.log(filter[0].uuid +";;;" + filter[0].characteristics[0].uuid);

预期输出:serviceuuid ::: characteruuid Current : serviceuuid ::: WrongID

相关问题