Проблема:
Я работаю над мини-проектом, включающим файл JSON и express / nodejs, и застрял в части, содержащей следующие инструкции:
Используя почтовый маршрут, определите наиболее совместимого друга пользователя, используя следующие правила: Преобразуйте результаты каждого пользователя в простой массив чисел.
Сравните разницу между оценками текущего пользователя и оценками потенциальных совпадений,вопрос за вопросом.Сложите различия, чтобы рассчитать totalDifference.
Пример: Пользователь 1: [5, 1, 4, 4, 5, 1, 2, 5, 4, 1] Пользователь 2: [3, 2, 6, 4, 5, 1, 2, 2, 4, 1]
Общая разница: 2 + 1 + 2 + 3 = 8
Не забудьте использовать абсолютную величину различий;отрицательных результатов нет!Ваше приложение должно вычислять как 5-3, так и 3-5 как 2 и т. Д.
Я могу получить результаты, которые выглядят следующим образом (представленный массив является последним массивом всех 5):
![results](https://i.stack.imgur.com/5Sj81.png)
Вот часть кода, которую я использую для этого:
app.post('/surveyResponse', function(req,res){
let photo = req.body.url;
let name = req.body.name;
let travel = req.body.travel;
let affection = req.body.affection;
let family = req.body.family;
let fitness = req.body.fitness;
let movie = req.body.movie;
let education = req.body.education;
let career = req.body.career;
let marriage = req.body.marriage;
let children = req.body.children;
let pets = req.body.pets;
let sum = 0;
let obj = {};
let person = {
name: name,
photo: photo,
scores: [
travel,
affection,
family,
fitness,
movie,
education,
career,
marriage,
children,
pets
]
}
//finding the sum of all the numbers
for(i in person.scores){
sum+=Number(person.scores[i]);
}
//form submission results
let score = person.scores;
// Read the file and send to the callback
fs.readFile('./app/data/friends.json', handleFile)
// Write the callback function
function handleFile(err, data) {
if (err) throw err
obj = JSON.parse(data)
for(var key in obj){
var obj2 = obj[key];
console.log(obj2.scores);
}
//this is the console.log for my form submission array
console.log(score);
}
//------------------------------------
// result that prints out on the HTML
res.send('Your name is ' + name + ' You Score is ' + sum );
});
ЦЕЛЬ
Цель состоит в том, чтобы найти пользователя с наименьшей разницей между его результатами и данными, представленными пользователем.
ИССЛЕДОВАНИЯ
Я провел исследование Как сравнить каждый объект в массиве друг с другом.Когда найдено, обновите объект новым свойством Как вычесть несколько объектов из массива с другим массивом , и в большинстве примеров рассматривается наличие отдельных объектов JSON и сравнение их друг с другом и с тем, что яобнаружил, что сравнивал массив объектов JSON, просто сравнивал номера телефонов.Я застрял на своих следующих шагах.Мне просто нужен старт / руководство, пожалуйста.
Вот файл JSON, с которым я работаю:
[
{
"name": "Mike Jackson",
"photo": "./app/public/matchPhotos/photo0.jpg",
"scores": [
"3",
"2",
"4",
"3",
"3",
"4",
"4",
"4",
"3",
"4"
]
},
{
"name": "Jermaine Subia",
"photo": "./app/public/matchPhotos/photo1.jpg",
"scores": [
"4",
"4",
"2",
"2",
"4",
"5",
"3",
"4",
"5",
"2"
]
},
{
"name": "Taji Gibson",
"photo": "./app/public/matchPhotos/photo2.jpg",
"scores": [
"1",
"5",
"3",
"2",
"3",
"1",
"3",
"4",
"3",
"3"
]
},
{
"name": "Jamie Schully",
"photo": "./app/public/matchPhotos/photo3.jpg",
"scores": [
"5",
"3",
"3",
"4",
"2",
"4",
"4",
"5",
"5",
"5"
]
},
{
"name": "Justin Andres",
"photo": "./app/public/matchPhotos/photo4.jpg",
"scores": [
"2",
"1",
"1",
"1",
"2",
"3",
"2",
"2",
"2",
"4"
]
},
{
"name": "Austin Brooks",
"photo": "./app/public/matchPhotos/photo5.jpg",
"scores": [
"2",
"3",
"4",
"2",
"4",
"4",
"4",
"4",
"5",
"4"
]
},
{
"name": "Jessica Jones",
"photo": "./app/public/matchPhotos/photo6.jpg",
"scores": [
"4",
"4",
"4",
"4",
"4",
"4",
"4",
"4",
"5",
"4"
]
},
{
"name": "Jasmine Love",
"photo": "./app/public/matchPhotos/photo7.jpg",
"scores": [
"4",
"3",
"3",
"2",
"2",
"2",
"2",
"1",
"2",
"1"
]
},
{
"name": "Sandra Smith",
"photo": "./app/public/matchPhotos/photo8.jpg",
"scores": [
"1",
"2",
"2",
"2",
"4",
"3",
"4",
"3",
"3",
"1"
]
},
{
"name": "Kevin Hart",
"photo": "./app/public/matchPhotos/photo9.jpg",
"scores": [
"5",
"5",
"3",
"3",
"2",
"2",
"5",
"5",
"4",
"3"
]
}
]
ОБНОВЛЕНИЕ 1
Iя пытаюсь включить следующий код, но не понимаю, почему я продолжаю получать следующую ошибку:
ReferenceError: данные не определены
Я считаю, что это должноделать с тем, как я пытаюсь включить входящие данные.Я взял код и попытался перевести его под свой код.
// Read the file and send to the callback
fs.readFileSync('./app/data/friends.json', findCompatibility); <---- This is the line I think is causing issues
// Write the callback function
function findCompatibility(data) {
var results = [];
for (let i = 0; i < data.length; i++) {
for (let j = 1; j < data.length - 1; j++) {
const user1 = data[i];
const user2 = data[j];
var difference = 0;
for (let k = 0; k < user1.scores.length; k++) {
difference += Math.abs(Number(user1.scores[k]) - Number(user2.scores[k]));
}
results.push({"name": user1.name, "friend": user2.name, "difference": difference});
}
}
return results;
}
console.log(findCompatibility(data));