我一直在看这个,阅读了一段时间,但似乎无法理解。我确信这是简单的,但我不知道为什么我可以访问收集的数据。我得到了一个错误
测试未定义
如果我在for循环之外移动,我可以很好地访问它。我显然错过了一些简单的东西。任何帮助都会很好。
function whatIsInAName(collection, source) {
// What's in a name?
var arr = [];
// Only change ode below this line
var test = Object.values(source);
for(var i = 0; i < collection.length; i++) {
if (collection[i].test === source[0].test){
arr[i] = collection[i];
}
}
// Only change code above this line
//arr = collection[0].last;
return arr;
}
whatIsInAName([{ first: "Romeo", last: "Montague" }, { first: "Mercutio",
last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" });发布于 2017-03-07 06:34:08
在您的代码Object.values中,返回源的值为"Capulet",而在for循环中,您将源等效为数组(源是对象),这就是为什么测试是未定义的。
function whatIsInAName(collection, source) {
// What's in a name?
var arr = [];
// Only change ode below this line
var test = Object.keys(source);//changes values to keys
console.log(test);
for(var i = 0; i < collection.length; i++) {
if (collection[i][test] === source[test]){ //change how you are accessing test
arr.push(collection[i]);
}
}
// Only change code above this line
//arr = collection[0].last;
console.log(arr);
return arr;
}
whatIsInAName([{ first: "Romeo", last: "Montague" }, { first: "Mercutio",
last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" });
发布于 2017-03-07 06:35:23
要传入的对象没有名为test的密钥。如果您试图使用您在这里创建的变量var test = Object.values(source);,这将无法工作,因为test无论如何都是一个数组。
你可以尝试这样的方法:
if (collection[i][test] === source[0][test])但我认为这也行不通,因为根据test的文档,Object.values()的值应该是Capulet
发布于 2017-03-07 06:40:43
尝尝这个。
function whatIsInAName(collection, source) {
var arr = [];
var keys = Object.keys(source);
for(var i = 0; i < collection.length; i++) {
var item = collection[i];
var all = true;
for(var k = 0; k < keys.length; k++){
var key = keys[k];
if(item[key] != source[key]){
all = false;
break;
}
}
if(all){
arr.push(item)
}
}
return arr;
}https://stackoverflow.com/questions/42641574
复制相似问题