使用 Node.js迭代对象的数组,如果值匹配,则将所有相关值插入不同的数组中



>输入

[
{"Id":1,"text":"Welcome","question":"san","translation":"willkommen."}, 
{"Id":1,"text":"Welcome","question":"se","translation":"bienvenida"}, 
{"Id":1,"text":"Welcome","question":"fr","translation":"propriétaires"},
{"Id":1,"text":"ajax","question":"san","translation":"ommen."}, 
{"Id":1,"text":"ajax","question":"se","translation":"bienve"}, 
{"Id":1,"text":"ajax","question":"fr","translation":"propires"}
]

如果问题 = san,那么所有"san"对象都将插入到数组中,依此类推-

san:[{"text":"Welcome","question":"san","translation":"willkommen.}, 
     {"text":"ajax","question":"san","translation":"ommen."}, 
se:[{"text":"Welcome","question":"se","translation":"bienvenida.}, 
    {"text":"ajax","question":"se","translation":"bienve."}, 
fr:[{"text":"Welcome","question":"fr","translation":"propriétaires.}, 
    {"text":"ajax","question":"fr","translation":"propires."},

问题是我如何检查 question=san 然后创建一个数组并在其中插入所有 san 值,依此类推,而无需对问题属性值进行硬编码。

尝试循环的东西,但如何在没有硬编码的情况下匹配,因为将来的问题属性可能会改变. question="san" 将全部放在一个数组中 "se" 将全部放在一个数组中,依此类推。 新手对nodejs知之甚少。

尝试了这样的事情,但没有按要求的方式出现

fs.readFile('./data.json', 'utf8', function (err,data) {
data = JSON.parse(data); 
var array = [];
for(var i = 0; i < data.length; i++) {
var lang = data[i].language;
for(var j= 0; j< data.length; j++) {
  if(lang == data[j].language){
    array.push(data[j].language);
    array.push(data[j].translation);
    array.push(data[j].text);
   }   
 }
}

输出 必需

san:[{"text":"Welcome","question":"san","translation":"willkommen.}, 
     {"text":"ajax","question":"san","translation":"ommen."}, 
se:[{"text":"Welcome","question":"se","translation":"bienvenida.}, 
    {"text":"ajax","question":"se","translation":"bienve."}, 
fr:[{"text":"Welcome","question":"fr","translation":"propriétaires.}, 
    {"text":"ajax","question":"fr","translation":"propires."},

我建议你使用 ES6 函数而不是 for 。您可以分离不同的进程,并使代码更具模块化和声明性。通过这种方式,您可以轻松更改所需的输出,因为您的代码是由小块组成的。

const data = [
 {"Id":1,"text":"hi all present ","language":"sde","translation":"Hernjd ndjjsjdj"},
 {"Id":1,"text":"hi all present","language":"ses","translation":"dfks kdfk kdfk"},
{"Id":1,"text":"hi all present","language":"sfr","translation":"bsh kkoweofeo"},
{"Id":1,"text":"hi all present","language":"szh","translation":"kdijo keow"},
{"Id":1,"text":"activated","language":"sde","translation":"Konto eid ke"},
{"Id":1,"text":"activated","language":"ses","translation":"La cueweffewfefwef."},
{"Id":1,"text":"activated","language":"sfr","translation":"Cowefrwef"},
{"Id":1,"text":"activated","language":"szh","translation":"fhewjhfwh"},
{"Id":1,"text":"completed","language":"sde","translation":"Ihr fwejiewf"},
{"Id":1,"text":"completed","language":"ses","translation":"Ya hfuwifrw"},
{"Id":1,"text":"completed","language":"sfr","translation":"Votrkwfwe"},
{"Id":1,"text":"completed","language":"szh","translation":"dmksfkwkf"},
{"Id":1,"text":"ACTION","language":"sde","translation":"AKTION"},
{"Id":1,"text":"ACTION","language":"ses","translation":"ACCIONES"},
{"Id":1,"text":"ACTION","language":"fr","translation":"ACTION"}];
// Define the properties that we want to filter for each element
const filterProperties = (item) => ({
	text:item.text,
  language: item.language,
  translation:item.translation
})
// Given a type of languages ('sde'), filter the data in function of this value
const getItemsByLanguage = (language) => {
	return data.filter((item) => item.language === language)
}
const onlyUnique = (value, index, self) => { 
    return self.indexOf(value) === index;
}
// Get the unique values of languages: ['sde', 'ses', 'sfr', ...]
const uniqueLanguages = data.map((item) => item.language).filter(onlyUnique)
// Get all found items for a language ('sde') and get the desired format (returns array of objects)
const resultArray = uniqueLanguages.map((language) => ( 
	{[language]: getItemsByLanguage(language).map(filterProperties)}
 ))
 
 // Convert the array of objects to single object
 const result = Object.assign({}, ...resultArray)
 
 console.log(result)

const data = [
 {"Id":1,"text":"hi all present ","language":"sde","translation":"Hernjd ndjjs 
 jdj"},
 {"Id":1,"text":"hi all present","language":"ses","translation":"dfks kdfk 
 kdfk"},
{"Id":1,"text":"hi all present","language":"sfr","translation":"bsh kkowe 
ofeo"},
{"Id":1,"text":"hi all present","language":"szh","translation":"kdijo keow"},
{"Id":1,"text":"activated","language":"sde","translation":"Konto eid ke"},
{"Id":1,"text":"activated","language":"ses","translation":"La cueweffewfef 
wef."},
{"Id":1,"text":"activated","language":"sfr","translation":"Cowefrwef"},
{"Id":1,"text":"activated","language":"szh","translation":"fhewjhfwh"},
{"Id":1,"text":"completed","language":"sde","translation":"Ihr fwejiewf"},
{"Id":1,"text":"completed","language":"ses","translation":"Ya hfuwifrw"},
{"Id":1,"text":"completed","language":"sfr","translation":"Votrkwfwe"},
{"Id":1,"text":"completed","language":"szh","translation":"dmksfkwkf"},
{"Id":1,"text":"ACTION","language":"sde","translation":"AKTION"},
{"Id":1,"text":"ACTION","language":"ses","translation":"ACCIONES"},
{"Id":1,"text":"ACTION","language":"fr","translation":"ACTION"}];
// Define the properties that we want to filter for each element
const filterProperties = (data) => ({
	text:data.text,
  question: data.question,
  translation:data.translation
})
// Given a type of question ('san'), filter the data in function of this value
const getQuestions = (question) => {
	return data.filter((item) => item.question === question)
}
const onlyUnique = (value, index, self) => { 
    return self.indexOf(value) === index;
}
// Get the unique values of questions: ['san', 'se', 'fr']
const uniqueQuestions = data.map((item) => item.question).filter(onlyUnique)
// Get all found values for a question and get the desired format (returns 
 array of objects)
const resultArray = uniqueQuestions.map((question) => ( 
	{[question]: getQuestions(question).map(filterProperties)}
 ))
 
 // Convert the array of objects to single object
 const result = Object.assign({}, ...resultArray)
 
 console.log(result)

最新更新