Photos:
- id: Photo1
Type: Color
Shade: Grey
- id: Photo2
Type: Color
Shade: Red
这里是将上面的yaml文件转换为JSON对象,并尝试根据ID查找一张照片:
const raw = fs.readFileSync("Photos.yaml", 'utf8');
const PhotoData= YAML.load(raw);
export const getSpecificPhoto = (req,res)=>{
const { id } = req.params;
let photoArray = []; //photoArray
let getPhoto = JSON.stringify(PhotoData); //Converting to JSON string
photoArray.push(getPhoto); //Pushing to arrayv so that search can be done
console.log(photoArray);
const foundPhoto = photoArray.find((photo) => photo.id == id);
console.log(foundPhoto );
}
得到了以下结果:
console.log(photoArray) => {"Photos":[{"id":"Photo1","Type":"Color","Shade":"Grey"},{"id":"Photo2","Type":"Color","Shade":"Red"}]}
console.log(foundPhoto) => undefined
问题:我怀疑在console.log(photoArray)的结果中获取“照片”导致我基于id的照片搜索失败。如何去除这个?我相信如果这个被移除,搜索和返回照片将会起作用
您的数据在photos
对象中,然后推入一个空数组。所以当你从数组中查找时,你需要从正确的位置得到它。
正确的代码:
null
(function test(id) {
let PhotoData = "{\"Photos\":[{\"id\":\"Photo1\", \"Type\": \"Color\", \"Shade\": \"Grey\"}, {\"id\": \"Photo2\", \"Type\": \"Color\", \"Shade\": \"Red\"}]}"
let photoArray = []; //photoArray
let getPhoto = JSON.parse(PhotoData); //Converting to JSON object
console.log(getPhoto);
photoArray.push(getPhoto); //Pushing to arrayv so that search can be done
console.log(photoArray);
const foundPhoto = photoArray[0].Photos.find((photo) => photo.id == id);
console.log(foundPhoto );
})("Photo1");
奇怪的是,您使用json.stringify()
将这个带有照片的对象转换回字符串,然后将该字符串添加到数组中。请看下面我的建议。
null
const existingArrayOfPhotos = [];
yamlString = `Photos:
- id: Photo1
Type: Color
Shade: Grey
- id: Photo2
Type: Color
Shade: Red`
const photoData = YAML.parse(yamlString);
existingArrayOfPhotos.push(...photoData.Photos)
const foundPhoto = existingArrayOfPhotos.find((photo) => photo.id == "Photo1");
console.log(foundPhoto);
<script src="https://cdnjs.cloudflare.com/ajax/libs/yamljs/0.3.0/yaml.min.js"></script>