У меня есть массив слов с их координатами в документе, я хочу превратить их в предложения. Мой входной сигнал массива:
[
{
"bounds": [
{
"x": 10,
"y": 10
},
{
"x": 15,
"y": 10
},
{
"x": 15,
"y": 15
},
{
"x": 10,
"y": 15
}
],
"desc": "Hey"
},
{
"bounds": [
{
"x": 18,
"y": 10
},
{
"x": 24,
"y": 10
},
{
"x": 24,
"y": 15
},
{
"x": 18,
"y": 15
}
],
"desc": "Name"
},
{
"bounds": [
{
"x": 18,
"y": 20
},
{
"x": 24,
"y": 20
},
{
"x": 24,
"y": 25
},
{
"x": 18,
"y": 25
}
],
"desc": "What"
},
{
"bounds": [
{
"x": 18,
"y": 20
},
{
"x": 24,
"y": 20
},
{
"x": 24,
"y": 25
},
{
"x": 18,
"y": 25
}
],
"desc": "Sup"
}
]
Выход программы должен быть:
Hey Name
What Sup
Каким образом я могу это сделать (Идеально реализовано с помощью JavaScript)?
Вы можете использовать хеш-таблицу и заказать ее для строк и позиций, а затем вернуть текст в этом порядке.
var data = [{ bounds: [{ x: 10, y: 10 }, { x: 15, y: 10 }, { x: 15, y: 15 }, { x: 10, y: 15 }], desc: "Hey" }, { bounds: [{ x: 18, y: 10 }, { x: 24, y: 10 }, { x: 24, y: 15 }, { x: 18, y: 15 }], desc: "Name" }, { bounds: [{ x: 18, y: 20 }, { x: 24, y: 20 }, { x: 24, y: 25 }, { x: 18, y: 25 }], desc: "What" }, { bounds: [{ x: 18, y: 20 }, { x: 24, y: 20 }, { x: 24, y: 25 }, { x: 18, y: 25 }], desc: "Sup" }],
hash = {},
result;
data.forEach(function (a) {
hash[a.bounds[0].y] = hash[a.bounds[0].y] || {};
hash[a.bounds[0].y][a.bounds[0].x] = hash[a.bounds[0].y][a.bounds[0].x] || [];
hash[a.bounds[0].y][a.bounds[0].x].push({ desc: a.desc, end: a.bounds[2] });
});
result = Object.keys(hash)
.sort((a, b) => a - b)
.map(k => Object.keys(hash[k])
.sort((a, b) => a - b)
.reduce((r, l) => [...r, ...hash[k][l].map(c => c.desc)], [])
.join(' ')
)
.join('\n');
console.log(result);
console.log(hash);
.as-console-wrapper { max-height: 100% !important; top: 0; }