NodeJS 在对象字段中查找字符串- Javascript

wpx232ag  于 2022-12-12  发布在  Node.js
关注(0)|答案(2)|浏览(171)

我有弦:

city = 'Hải Phòng'

和一个我从API中得到的数组,看起来像这样:

data = [{},{},{},{ MaTinhThanh: 'xx', TenTinhThanh: 'Hải Phòng' },{},{}]

我要在数据中查找对象:

mycity = data.find( c=>c.TenTinhThanh.includes(city))

上面给出了undefined,但我希望

{ MaTinhThanh: 'xx', TenTinhThanh: 'Hải Phòng' }

我的API端点是:

https://donhang.vnpost.vn/api/api/TinhThanh/GetAll

我使用可视化代码、Axios、nodejs
我还尝试了获取两个字符串的长度:

data[3].TenTinhThanh.length` ====>11
city.length` ====>9

有什么问题吗?

vmdwslir

vmdwslir1#

您的两个字串不包含相同的字符,即使看起来相同:

const city = "Hải Phòng";
const objV = "Hải Phòng";
console.log(city === objV); // false

这是因为您使用的是precomposed形式:

  • (* 上面带钩的拉丁小写字母a *)
  • ò(* 带抑音符的拉丁小写字母o *)

这些预先组合的字符是旧版Unicode字符,您应该使用分解形式,也就是对象值中使用的字符:

  • (* 拉丁小写字母a* a,后跟 * 组合上面的钩 * ̉
  • (* 拉丁小写字母o* o,后跟 * 组合重音符 * ̀

(yes你可以通过更新你的city来保存"Hải Phòng"(它使用的分解字符)。如果你因为某种原因不能分解你的字符串,你可以在你的输入字符串或你的目标字符串上使用String.prototype.normalize(),例如:

const city = 'Hải Phòng'.normalize("NFD"); // or just use `const city = "Hải Phòng";`

const data = [{},{},{},{ MaTinhThanh: 'xx', TenTinhThanh: 'Hải Phòng' },{},{}];

const mycity = data.find( c=>c.TenTinhThanh?.includes(city));
console.log(mycity);
tkclm6bt

tkclm6bt2#

首先检查该属性是否存在,然后与city值进行匹配。看起来字符串的编码可能有问题,因为在将city var值复制到对象之前收到了一个错误。
编辑:看起来另一个用户详细地阐述了这个问题。

let city = 'Hải Phòng';

const data = [{},{},{},{ MaTinhThanh: 'xx', TenTinhThanh: 'Hải Phòng' },{},{}];

let mycity = data.find(c => c.TenTinhThanh && c.TenTinhThanh === city);

console.log(mycity);

相关问题