无法在对象上运行函数-无法理解原因-javascript

无法在对象上运行函数-无法理解原因-javascript,javascript,arrays,Javascript,Arrays,你好,我是javascript新手。 我有一个问题的代码,我不能找出它是什么。我花了几个小时试图找出问题所在,但我没有成功 我有一个“工程师”数组,这个数组包含我所有用户的详细信息。我想指出,第一个用户的索引是0 我有一个数组“cluster”,这是一个数组,它将每个用户添加到它最适合的组中,这是我从kmeans算法中得到的统计数据-此算法未实现-给出了集群 用户0是对我很重要的用户,我想知道他在群集中的哪个组中,请带回此组中的所有成员 因此,有了这个组中所有成员的索引,我想根据“工程师”数组返

你好,我是javascript新手。 我有一个问题的代码,我不能找出它是什么。我花了几个小时试图找出问题所在,但我没有成功

我有一个“工程师”数组,这个数组包含我所有用户的详细信息。我想指出,第一个用户的索引是0

我有一个数组“cluster”,这是一个数组,它将每个用户添加到它最适合的组中,这是我从kmeans算法中得到的统计数据-此算法未实现-给出了集群

用户0是对我很重要的用户,我想知道他在群集中的哪个组中,请带回此组中的所有成员

因此,有了这个组中所有成员的索引,我想根据“工程师”数组返回每个索引的详细信息

我正在添加我迄今为止所做工作的代码:

  const engineers = [
    // frontend engineers
    { html: 5, angular: 5, react: 3, css: 3 },
    { html: 4, react: 5, css: 4 },
    { html: 4, react: 5, vue: 4, css: 5 },
    { html: 3, angular: 3, react: 4, vue: 2, css: 3 },

    // backend engineers
    { nodejs: 5, python: 3, mongo: 5, mysql: 4, redis: 3 },
    { java: 5, php: 4, ruby: 5, mongo: 3, mysql: 5 },
    { python: 5, php: 4, ruby: 3, mongo: 5, mysql: 4, oracle: 4 },
    { java: 5, csharp: 3, oracle: 5, mysql: 5, mongo: 4 },

    // mobile engineers
    { objc: 3, swift: 5, xcode: 5, crashlytics: 3, firebase: 5, reactnative: 4 },
    { java: 4, swift: 5, androidstudio: 4 },
    { objc: 5, java: 4, swift: 3, androidstudio: 4, xcode: 4, firebase: 4 },
    { objc: 3, java: 5, swift: 3, xcode: 4, apteligent: 4 },

    // devops
    { docker: 5, kubernetes: 4, aws: 4, ansible: 3, linux: 4 },
    { docker: 4, marathon: 4, aws: 4, jenkins: 5 },
    { docker: 3, marathon: 4, heroku: 4, bamboo: 4, jenkins: 4, nagios: 3 },
    { marathon: 4, heroku: 4, bamboo: 4, jenkins: 4, linux: 3, puppet: 4, nagios: 5 }
  ];
  
  const cluster = [
  {
    centroid: { docker: 3, kubernetes: 1, aws: 2, ansible: 0.75, linux: 1.75, marathon: 3, jenkins: 3.25,heroku: 2, bamboo: 2, nagios: 2, puppet: 1 },
    vectorIds: [ 12, 13, 14, 15 ]
  },
  {
    centroid: { nodejs: 1.25, python: 2, mongo: 4.25, mysql: 4.5, redis: 0.75, java: 2.5, php: 2, ruby: 2, oracle: 2.25, csharp: 0.75 },
    vectorIds: [ 4, 5, 6, 7 ]
  },
  {
    centroid: { objc: 2.75, swift: 4, xcode: 3.25, crashlytics: 0.75, firebase: 2.25, reactnative: 1, java: 3.25, androidstudio: 2, apteligent: 1 },
    vectorIds: [ 8, 9, 10, 11 ]
  },
  {
    centroid: { html: 4, angular: 2, react: 4.25, css: 3.75, vue: 1.5 },
    vectorIds: [ 0, 1, 2, 3 ]
  }
];

const userSerialLocation = 0;

function reduceUserSerialLocationGroup(data, serialLocation) {
  let userMatch = {};
  let groupFound = [];
  let found = false;
  Object.keys(data).forEach(centroid => {
    centroid.vectorIds.forEach(vectorId => {
      if (!found) {
        if (vectorId === serialLocation) {
          groupFound = [...vectorIds];
          found = true;
        }
      }
    });
  });

  return groupFound;
};

function reduceGroupUsersHandles (foundUserIndexes, userIndex, data) {
  let usersInGroup = [];
  foundUserIndexes.forEach(index => {
    if (index !== userIndex) {
      usersInGroup.push({
        ...data[index]
      })
    }
  });
  return usersInGroup;
};

let SerialLocationGroup = reduceUserSerialLocationGroup(cluster, userSerialLocation);
let GroupUsersHandles = reduceGroupUsersHandles (SerialLocationGroup, userSerialLocation , engineers);
console.log(SerialLocationGroup);
问题是,我正在尝试从“reduceUserSerialLocationGroup”函数返回用户0所在的组。我想返回这个组的索引。
在这之后,我想返回,对于组中的每个用户,他的详细信息都在“工程师”数组中,我使用函数“reduceGroupUsersHandles”来完成。我认为这个问题很小,但我花了几个小时坐在上面无法解决。

错误很明显-您在没有forEach函数的情况下调用forEach

我在它失败之前放置了
console.log
,因此您可以看到有一个值为
0
的变量,您在它上面调用forEach,结果基本上是
0.forEach

const工程师=[
//前端工程师
{html:5,angular:5,react:3,css:3},
{html:4,react:5,css:4},
{html:4,react:5,vue:4,css:5},
{html:3,angular:3,react:4,vue:2,css:3},
//后端工程师
{nodejs:5,python:3,mongo:5,mysql:4,redis:3},
{java:5,php:4,ruby:5,mongo:3,mysql:5},
{python:5,php:4,ruby:3,mongo:5,mysql:4,oracle:4},
{java:5,csharp:3,oracle:5,mysql:5,mongo:4},
//移动工程师
{objc:3,swift:5,xcode:5,crashlytics:3,firebase:5,reactnative:4},
{java:4,swift:5,androidstudio:4},
{objc:5,java:4,swift:3,androidstudio:4,xcode:4,firebase:4},
{objc:3,java:5,swift:3,xcode:4,apteligent:4},
//德沃斯
{docker:5,kubernetes:4,aws:4,ansible:3,linux:4},
{docker:4,marathon:4,aws:4,jenkins:5},
{docker:3,marathon:4,heroku:4,Bambor:4,jenkins:4,nagios:3},
{marathon:4,heroku:4,Bambor:4,jenkins:4,linux:3,puppet:4,nagios:5}
];
常数簇=[
{
质心:{docker:3,kubernetes:1,aws:2,ansible:0.75,linux:1.75,marathon:3,jenkins:3.25,heroku:2,Bambor:2,nagios:2,puppet:1},
向量:[12,13,14,15]
},
{
质心:{nodejs:1.25,python:2,mongo:4.25,mysql:4.5,redis:0.75,java:2.5,php:2,ruby:2,oracle:2.25,csharp:0.75},
向量:[4,5,6,7]
},
{
质心:{objc:2.75,swift:4,xcode:3.25,crashlytics:0.75,firebase:2.25,reactnative:1,java:3.25,androidstudio:2,apteligent:1},
向量:[8,9,10,11]
},
{
质心:{html:4,angular:2,react:4.25,css:3.75,vue:1.5},
向量:[0,1,2,3]
}
];
const userSerialLocation=0;
函数reduceUserSerialLocationGroup(数据,serialLocation){
让userMatch={};
设groupFound=[];
让发现=错误;
Object.keys(数据).forEach(质心=>{
console.log(质心)
形心.vectorIds.forEach(vectorId=>{
如果(!找到){
if(向量===serialLocation){
groupFound=[…向量];
发现=真;
}
}
});
});
返回groupFound;
};
函数reduceGroupUsersHandles(FoundUserIndex、userIndex、data){
让usersInGroup=[];
foundUserIndexes.forEach(索引=>{
如果(索引!==用户索引){
usersInGroup.push({
…数据[索引]
})
}
});
返回usersInGroup;
};
让SerialLocationGroup=reduceUserSerialLocationGroup(集群,userSerialLocation);
设GroupUsersHandles=reduceGroupUsersHandles(SerialLocationGroup,userSerialLocation,engineers);

console.log(SerialLocationGroup)错误很明显-您在没有forEach函数的情况下调用forEach

我在它失败之前放置了
console.log
,因此您可以看到有一个值为
0
的变量,您在它上面调用forEach,结果基本上是
0.forEach

const工程师=[
//前端工程师
{html:5,angular:5,react:3,css:3},
{html:4,react:5,css:4},
{html:4,react:5,vue:4,css:5},
{html:3,angular:3,react:4,vue:2,css:3},
//后端工程师
{nodejs:5,python:3,mongo:5,mysql:4,redis:3},
{java:5,php:4,ruby:5,mongo:3,mysql:5},
{python:5,php:4,ruby:3,mongo:5,mysql:4,oracle:4},
{java:5,csharp:3,oracle:5,mysql:5,mongo:4},
//移动工程师
{objc:3,swift:5,xcode:5,crashlytics:3,firebase:5,reactnative:4},
{java:4,swift:5,androidstudio:4},
{objc:5,java:4,swift:3,androidstudio:4,xcode:4,firebase:4},
{objc:3,java:5,swift:3,xcode:4,apteligent:4},
//德沃斯
{docker:5,kubernetes:4,aws:4,ansible:3,linux:4},
{docker:4,marathon:4,aws:4,jenkins:5},
{docker:3,marathon:4,heroku:4,Bambor:4,jenkins:4,nagios:3},
{marathon:4,heroku:4,Bambor:4,jenkins:4,linux:3,puppet:4,nagios:5}
];
常数簇=[
{
function reduceUserSerialLocationGroup(data, serialLocation) {
  let userMatch = {};
  let groupFound = [];
  let found = false;
  data.forEach(cluster => {
    cluster.vectorIds.forEach(vectorId => {
      if (!found) {
        if (vectorId === serialLocation) {
          groupFound = [...cluster.vectorIds];
          found = true;
        }
      }
    });
  });

  return groupFound;
};