基本上,我想转换这个对象数组:
[
{ type: 'heading-one', children: [{ text: 'Introduction' }] },
{
type: 'paragraph',
children: [{ text: 'By creating ' }],
},
{ type: 'heading-one', children: [{ text: 'The Challenge' }] },
{
type: 'paragraph',
children: [{ text: 'By .' }],
},
{ type: 'heading-one', children: [{ text: 'The result' }] },
{
type: 'image',
image: 'https://mani62/2021-10-19T16:36:45.514Z-tkabg-background-png.png',
children: [{ text: '' }],
},
{
type: 'image',
image: 'https://mankground-png.png',
children: [{ text: '' }],
},
{
type: 'image',
image: 'https://manife6ce052d62/2021-10-19T16:36:45.517Z-1wwvq-background-png.png',
children: [{ text: '' }],
},
{ type: 'heading-one', children: [{ text: 'Conclusion' }] },
{
type: 'paragraph',
children: [{ text: 'By creating an Ac.' }],
},
];
对象数组:
[
{ type: 'heading-one', children: [{ text: 'Introduction' }] },
{
type: 'paragraph',
children: [{ text: 'By creating ' }],
},
{ type: 'heading-one', children: [{ text: 'The Challenge' }] },
{
type: 'paragraph',
children: [{ text: 'By .' }],
},
{ type: 'heading-one', children: [{ text: 'The result' }] },
{
type: 'image',
images: [
'https://mani62/2021-10-19T16:36:45.514Z-tkabg-background-png.png',
'https://manife6ce052d62/2021-10-19T16:36:45.517Z-1wwvq-background-png.png',
'https://manife6ce052d62/2021-10-19T16:36:45.517Z-1wwvq-background-png.png',
],
},
{ type: 'heading-one', children: [{ text: 'Conclusion' }] },
{
type: 'paragraph',
children: [{ text: 'By creating an Ac.' }],
},
];
可以看到:
{
type: 'image',
image: 'https://mani62/2021-10-19T16:36:45.514Z-tkabg-background-png.png',
children: [{ text: '' }],
},
{
type: 'image',
image: 'https://mankground-png.png',
children: [{ text: '' }],
},
{
type: 'image',
image: 'https://manife6ce052d62/2021-10-19T16:36:45.517Z-1wwvq-background-png.png',
children: [{ text: '' }],
},
被替换为:
{
type: 'image',
images: [
'https://mani62/2021-10-19T16:36:45.514Z-tkabg-background-png.png',
'https://manife6ce052d62/2021-10-19T16:36:45.517Z-1wwvq-background-png.png',
'https://manife6ce052d62/2021-10-19T16:36:45.517Z-1wwvq-background-png.png',
],
},
所以,我想知道什么是最好的方法来获取所有具有type: image
的对象,并将它们与这些图像的数组连接到一个对象…同样,在这个例子中,只有一组type: image
图像,但可能存在这样的东西;其中有许多type: image
对象…
[
{ type: 'heading-one', children: [{ text: 'Introduction' }] },
{
type: 'paragraph',
children: [{ text: 'By creating ' }],
},
{ type: 'heading-one', children: [{ text: 'The Challenge' }] },
{
type: 'paragraph',
children: [{ text: 'By .' }],
},
{ type: 'heading-one', children: [{ text: 'The result' }] },
{
type: 'image',
image: 'https://mani62/2021-10-19T16:36:45.514Z-tkabg-background-png.png',
children: [{ text: '' }],
},
{
type: 'image',
image: 'https://mankground-png.png',
children: [{ text: '' }],
},
{
type: 'image',
image: 'https://manife6ce052d62/2021-10-19T16:36:45.517Z-1wwvq-background-png.png',
children: [{ text: '' }],
},
{ type: 'heading-one', children: [{ text: 'Conclusion' }] },
{
type: 'paragraph',
children: [{ text: 'By creating an Ac.' }],
},
{
type: 'image',
image: 'https://mankground-png.png',
children: [{ text: '' }],
},
{
type: 'image',
image: 'https://manife6ce052d62/2021-10-19T16:36:45.517Z-1wwvq-background-png.png',
children: [{ text: '' }],
},
];
解决方案是这样的:
[
{ type: 'heading-one', children: [{ text: 'Introduction' }] },
{
type: 'paragraph',
children: [{ text: 'By creating ' }],
},
{ type: 'heading-one', children: [{ text: 'The Challenge' }] },
{
type: 'paragraph',
children: [{ text: 'By .' }],
},
{ type: 'heading-one', children: [{ text: 'The result' }] },
{
type: 'image',
images: [
'https://mani62/2021-10-19T16:36:45.514Z-tkabg-background-png.png',
'https://manife6ce052d62/2021-10-19T16:36:45.517Z-1wwvq-background-png.png',
'https://manife6ce052d62/2021-10-19T16:36:45.517Z-1wwvq-background-png.png',
],
},
{ type: 'heading-one', children: [{ text: 'Conclusion' }] },
{
type: 'paragraph',
children: [{ text: 'By creating an Ac.' }],
},
{
type: 'image',
images: [
'https://mankground-png.png',
'https://manife6ce052d62/2021-10-19T16:36:45.517Z-1wwvq-background-png.png',
],
},
];
这使用了一个简单的循环来按照示例输出的方式对连续的图像对象进行分组。
见注释
var data = [{type:"heading-one",children:[{text:"Introduction"}]},{type:"paragraph",children:[{text:"By creating an Account on our service, you agree to subscribe to newsletters, marketing or promotional materials and other information we may send. You may opt out of receiving any, or all, of these communications from us by following the unsubscribe link or instructions provided in any email we send."}]},{type:"paragraph",children:[{text:"By creating an Account on our service, you agree to subscribe to newsletters, marketing or promotional materials and other information we may send. You may opt out of receiving any, or all, of these communications from us by following the unsubscribe link or instructions provided in any email we send."}]},{type:"heading-one",children:[{text:"The Challenge"}]},{type:"paragraph",children:[{text:"By creating an Account on our service, you agree to subscribe to newsletters, marketing or promotional materials and other information we may send. You may opt out of receiving any, or all, of these communications from us by following the unsubscribe link or instructions provided in any email we send."}]},{type:"paragraph",children:[{text:"By creating an Account on our service, you agree to subscribe to newsletters, marketing or promotional materials and other information we may send. You may opt out of receiving any, or all, of these communications from us by following the unsubscribe link or instructions provided in any email we send."}]},{type:"heading-one",children:[{text:"The result"}]},{type:"image",image:"https://manifestcmsc17f0d6ef1e94ccd9a9ff71aa6de1f0a164427-develop.s3.us-west-2.amazonaws.com/public/682a6e8c-f773-4868-9541-1cf6ce052d62/2021-10-19T16:36:45.514Z-tkabg-background-png.png",children:[{text:""}]},{type:"image",image:"https://manifestcmsc17f0d6ef1e94ccd9a9ff71aa6de1f0a164427-develop.s3.us-west-2.amazonaws.com/public/682a6e8c-f773-4868-9541-1cf6ce052d62/2021-10-19T16:36:45.516Z-58nhz-background-png.png",children:[{text:""}]},{type:"image",image:"https://manifestcmsc17f0d6ef1e94ccd9a9ff71aa6de1f0a164427-develop.s3.us-west-2.amazonaws.com/public/682a6e8c-f773-4868-9541-1cf6ce052d62/2021-10-19T16:36:45.517Z-1wwvq-background-png.png",children:[{text:""}]},{type:"heading-one",children:[{text:"Conclusion"}]},{type:"paragraph",children:[{text:"By creating an Account on our service, you agree to subscribe to newsletters, marketing or promotional materials and other information we may send. You may opt out of receiving any, or all, of these communications from us by following the unsubscribe link or instructions provided in any email we send."}]}];
// This will be the final result
var merged_data = [];
// For each item in the data array..
for(i=0; i<data.length; i++){
// If the current item is an image...
if(data[i].type === "image"){
// If the last item on the merged array was not an array of images
if(merged_data[merged_data.length-1].type !== "image"){
// Add an empty image array to the end of the merged array
merged_data.push({type: "image", images: []});
}
// Add our current image to the array on the end of the merged array
merged_data[merged_data.length-1].images.push(data[i].image);
}else{
// The current item isn't an image, add it to the merged array as is
merged_data.push(data[i]);
}
}
console.log(merged_data);
你可以使用这个代码片段来转换你的数组。
var data = [{type:"heading-one",children:[{text:"Introduction"}]},{type:"paragraph",children:[{text:"By creating an Account on our service, you agree to subscribe to newsletters, marketing or promotional materials and other information we may send. You may opt out of receiving any, or all, of these communications from us by following the unsubscribe link or instructions provided in any email we send."}]},{type:"paragraph",children:[{text:"By creating an Account on our service, you agree to subscribe to newsletters, marketing or promotional materials and other information we may send. You may opt out of receiving any, or all, of these communications from us by following the unsubscribe link or instructions provided in any email we send."}]},{type:"heading-one",children:[{text:"The Challenge"}]},{type:"paragraph",children:[{text:"By creating an Account on our service, you agree to subscribe to newsletters, marketing or promotional materials and other information we may send. You may opt out of receiving any, or all, of these communications from us by following the unsubscribe link or instructions provided in any email we send."}]},{type:"paragraph",children:[{text:"By creating an Account on our service, you agree to subscribe to newsletters, marketing or promotional materials and other information we may send. You may opt out of receiving any, or all, of these communications from us by following the unsubscribe link or instructions provided in any email we send."}]},{type:"heading-one",children:[{text:"The result"}]},{type:"image",image:"https://manifestcmsc17f0d6ef1e94ccd9a9ff71aa6de1f0a164427-develop.s3.us-west-2.amazonaws.com/public/682a6e8c-f773-4868-9541-1cf6ce052d62/2021-10-19T16:36:45.514Z-tkabg-background-png.png",children:[{text:""}]},{type:"image",image:"https://manifestcmsc17f0d6ef1e94ccd9a9ff71aa6de1f0a164427-develop.s3.us-west-2.amazonaws.com/public/682a6e8c-f773-4868-9541-1cf6ce052d62/2021-10-19T16:36:45.516Z-58nhz-background-png.png",children:[{text:""}]},{type:"image",image:"https://manifestcmsc17f0d6ef1e94ccd9a9ff71aa6de1f0a164427-develop.s3.us-west-2.amazonaws.com/public/682a6e8c-f773-4868-9541-1cf6ce052d62/2021-10-19T16:36:45.517Z-1wwvq-background-png.png",children:[{text:""}]},{type:"heading-one",children:[{text:"Conclusion"}]},{type:"paragraph",children:[{text:"By creating an Account on our service, you agree to subscribe to newsletters, marketing or promotional materials and other information we may send. You may opt out of receiving any, or all, of these communications from us by following the unsubscribe link or instructions provided in any email we send."}]}];
const transformArray = (givenArray) => {
let imagesArray = givenArray.filter((item) => item.type === "image");
let withoutImageArray = givenArray.filter((item) => item.type !== "image");
let arrayOfImageLinks = imagesArray.map((item) => item.image);
return [...withoutImageArray, { type: "images", images: arrayOfImageLinks }];
};
console.log(transformArray(data));
当你需要改变数组传递到这个方法时,你将得到转换后的数组。