Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用JavaScript模拟SQL连接_Javascript_Underscore.js - Fatal编程技术网

如何用JavaScript模拟SQL连接

如何用JavaScript模拟SQL连接,javascript,underscore.js,Javascript,Underscore.js,如何将两个对象(分数和人员)合并为一个对象(已合并)。我正在努力解决这个问题,因为我正在使用JavaScript和Meteor+Mongo组合 var scores = [ {person_id: "1", score_math: 9, score_biology: 9, score_chemistry: 9}, {person_id: "2", score_math: 9, score_biology: 8, score_chemistry: 9} ]; var persons = [ {p

如何将两个对象(分数和人员)合并为一个对象(已合并)。我正在努力解决这个问题,因为我正在使用JavaScript和Meteor+Mongo组合

var scores = [
{person_id: "1", score_math: 9, score_biology: 9, score_chemistry: 9},
{person_id: "2", score_math: 9, score_biology: 8, score_chemistry: 9}
];

var persons = [
{person_id: "1", person_name: "Bob", home_country: "Wakerly", age: 12},
{person_id: "2", person_name: "Arnie", home_country: "Templeton", age: 15},
{person_id: "3", person_name: "Steve", home_country: "Elberon", age: 10}
];


var joined = [
{person_id: "1", person_name: "Bob", home_country: "Wakerly", score_math: 9, score_biology: 9, score_chemistry: 9},
{person_id: "2", person_name: "Arnie", home_country: "Templeton", score_math: 9, score_biology: 8, score_chemistry: 9},
{person_id: "3", person_name: "Steve", home_country: "Elberon", score_math: 0, score_biology: 0, score_chemistry: 0}];
这是一个简化版本。我不处理未找到的值等
forEach
将在所有分数上循环。然后我找到了第一个匹配的人,假设它是唯一的。然后我使用
extend
将它们合并到一个新对象中

对这类事情要小心,如果你有大量的数据集,这些任务必须由后台处理。如果您确实需要执行大量连接,并且可以更改DBMS,如果RDBMS更适合,您可以选择它。

尝试:

var分数=[
{个人id:“1”,数学9分,生物9分,化学9分},
{个人id:“2”,数学9分,生物8分,化学9分}
];
个人变量=[
{人名:“1”,人名:“鲍勃”,母国:“韦克丽”,年龄:12},
{身份证:“2”,姓名:“阿尼”,母国:“坦普顿”,年龄:15},
{人名:“3”,人名:“史蒂夫”,母国:“埃尔贝隆”,年龄:10}
];
var=[];

对于(var i=0;i您可以通过基本的数组和对象操作来实现这一点

var分数=[
{个人id:“1”,数学9分,生物9分,化学9分},
{个人id:“2”,数学9分,生物8分,化学9分}
];
个人变量=[
{人名:“1”,人名:“鲍勃”,母国:“韦克丽”,年龄:12},
{身份证:“2”,姓名:“阿尼”,母国:“坦普顿”,年龄:15},
{人名:“3”,人名:“史蒂夫”,母国:“埃尔贝隆”,年龄:10}
];
innerjoin=函数(数据1、数据2、列){
var=[];
变量d1len=data1.length;
var d2len=data2.length;
//从第一个数组创建字典
var dict={};

对于(var i=0;i,这是一个在vanilla JS中包含临时对象和一些数组方法的方案

var分数=[{个人id:“1”,数学分数:9,生物分数:9,化学分数:9},{个人id:“2”,数学分数:9,生物分数:8,化学分数:9}],
persons=[{个人id:“1”,个人id:“鲍勃”,祖国:“韦克利”,年龄:12},{个人id:“2”,个人id:“阿尼”,祖国:“坦普顿”,年龄:15},{个人id:“3”,个人姓名:“史蒂夫”,祖国:“埃尔贝隆”,年龄:10}],
joined=persons.map(函数(a){
函数setProp(o){Object.keys(o).forEach(函数(k){Object[k]=o[k];});}
var对象={};
setProp(a);
setProp(这个[a.person_id]|{数学分数:0,生物分数:0,化学分数:0});
返回对象;
}减少(功能(r,a){
r[a.person\u id]=a;
返回r;
},Object.create(null));

document.write(''+JSON.stringify(joined,0,4)+'');
我建议您创建一个新的对象,该对象包含人员和分数详细信息,而不是创建一个平面合并对象

您可以利用功能来管理它

[
  [
    {"id":"1","person_name":"Bob","home_country":"Wakerly","age":12},
    {"id":"1","score_math":9,"score_biology":9,"score_chemistry":9}
  ],
  [
    {"id":"2","person_name":"Arnie","home_country":"Templeton","age":15},
    {"id":"2","score_math":9,"score_biology":8,"score_chemistry":9}
  ],
  [
    {"id":"3","person_name":"Steve","home_country":"Elberon","age":10},
    null
  ]
]

您可以使用以下工具轻松进行此类连接:

结果将是:

var scores = [
{person_id: "1", score_math: 9, score_biology: 9, score_chemistry: 9},
{person_id: "2", score_math: 9, score_biology: 8, score_chemistry: 9}
];

var persons = [
{person_id: "1", person_name: "Bob", home_country: "Wakerly", age: 12},
{person_id: "2", person_name: "Arnie", home_country: "Templeton", age: 15},
{person_id: "3", person_name: "Steve", home_country: "Elberon", age: 10}
];

//Function used in the .filter method. 'this' object is actually the person_id
function getScoreByPersonId(score){
  return score.person_id == this;
}

//Basic students implementations. You can enrich the structure of the 'item' object depending on your requirements.
var students = persons.map(function(p){
  var item = {};
  item['person'] = p;
  item['score'] = scores.filter(getScoreByPersonId, p.person_id)[0] || {};
  return item;

});
var persons = new StrelkiJS.IndexedArray();
persons.loadArray([
  {id: "1", person_name: "Bob", home_country: "Wakerly", age: 12},
  {id: "2", person_name: "Arnie", home_country: "Templeton", age: 15},
  {id: "3", person_name: "Steve", home_country: "Elberon", age: 10}
]);

var scores = new StrelkiJS.IndexedArray();
scores.loadArray([
  {id: "1", score_math: 9, score_biology: 9, score_chemistry: 9},
  {id: "2", score_math: 9, score_biology: 8, score_chemistry: 9}
]);

var res = persons.query([{
    from_col:"id",
    to_table: scores,
    to_col: "id",
    type: "outer"
}]);
[
  [
    {"id":"1","person_name":"Bob","home_country":"Wakerly","age":12},
    {"id":"1","score_math":9,"score_biology":9,"score_chemistry":9}
  ],
  [
    {"id":"2","person_name":"Arnie","home_country":"Templeton","age":15},
    {"id":"2","score_math":9,"score_biology":8,"score_chemistry":9}
  ],
  [
    {"id":"3","person_name":"Steve","home_country":"Elberon","age":10},
    null
  ]
]