我有两个JSON对象obj1&obj2。我想比较这些对象的值。
var obj1 = {"Don":"Test1","is":"hey","here":"yeah"};
var obj2 = {"Don":"Test1","is":"20","here":"lol"};
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情:
for( var key1 in obj1 && var key2 in obj2){
if(obj1.hasOwnProperty(key1) && obj2.hasOwnProperty(key2))
console.log(obj1[key1]+ " : " + obj2[key2]);
}
Run Code Online (Sandbox Code Playgroud)
我的输出应为:
Test1:Test1
hey:20
yeah:lol
Run Code Online (Sandbox Code Playgroud) 我有一个NSArray,其中所有对象都从相同的协议继承方法.我想做的是:
NSArray* arr = [NSArray arrayWithObjects:[Type_1 init],[Type_2 init], nil];
for(Protocol *element in arr)
{
[element do_this];
}
Run Code Online (Sandbox Code Playgroud)
arr是具有对象Type_1和Type_2的数组,它们都从名为Protocol的协议继承.
问题是协议不能用作for循环中的类型.我该如何解决这个问题?
我试图循环一个对象中的所有属性并删除所有虚假的内容,然后返回使用delete. 显然我做错了什么......这是我到目前为止编写的代码。
var obj = {
a: undefined,
b: "banana",
c: 0,
d: false,
e: "",
f: "apple",
g: 23
}
var truthy = function (obj) {
for (var i in obj) {
if (obj[i] === null || obj[i] === undefined) {
delete obj[i];
}
} return obj;
}
Run Code Online (Sandbox Code Playgroud)
这是实际的问题:创建一个函数,它接收一个对象,循环遍历它的所有属性,并删除所有错误的属性。然后返回传入的对象。(提示:删除)
我有一个从 JSON 文件(带有resolveJsonModule: true)导入的 JSON 对象。该对象如下所示:
"myobject": {
"prop1": "foo",
"prop2": "bar"
}
Run Code Online (Sandbox Code Playgroud)
因此它的类型如下所示:
"myobject": {
"prop1": "foo",
"prop2": "bar"
}
Run Code Online (Sandbox Code Playgroud)
这很好,但是当我尝试使用for...in循环时,
myobject: { prop1: string, prop2: string }
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
TS7053: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ "prop1": string; "prop2": string; }'.
No index signature with a parameter of type 'string' was found on type '{ "prop1": string; "prop2": string; }'.
Run Code Online (Sandbox Code Playgroud)
我知道这意味着迭代器key是 …
我在 Matt Neuburg 的《iOS 13 Swift 编程基础》中看到了如下的陈述:
\n\n\n当您使用 for...in 循环访问序列时,您实际循环访问的是该序列的副本。这意味着当你循环遍历序列时,改变序列是安全的:
\n
作者为上述陈述提供了以下示例:
\nvar s : Set = [1,2,3,4,5]\nfor i in s {\n if i.isMultiple(of:2) {\n s.remove(i)\n }\n} // s is now [1,3,5]\nRun Code Online (Sandbox Code Playgroud)\n在上面的示例中,我们可以看到原始数组从 [1,2,3,4,5,6] 更改为 [1,3,5]。这意味着数组本身已更改。因此,for in循环不是循环原始数组的副本,而是循环数组本身。这似乎与作者上述的说法相矛盾。
所以,我不确定作者的说法是否属实。有人可以澄清一下这个问题吗?非常感谢。
\n这有效:
for (var i = 0; i < this.size(); i++) {
values.push(this.cards[i].value);
}
Run Code Online (Sandbox Code Playgroud)
但这不是:
for (var card in this.cards) {
values.push(card.value);
}
Run Code Online (Sandbox Code Playgroud)
为什么?
我有一系列对象,它们将成为我网站中某个菜单的基础.它将使用JavaScript构建:
[
{"menuName":"Contact Info","sectionName":"contacts"},
{"menuName":"Facilities","sectionName":"facilities"},
{"menuName":"Locations","sectionName":"locations"},
{"menuName":"Packages","sectionName":"packages"},
{"menuName":"Policies","sectionName":"policies"},
{"menuName":"Reviews","sectionName":"reviews"},
{"menuName":"Rooms","sectionName":"rooms"}
]
Run Code Online (Sandbox Code Playgroud)
所以我决定使用"for in loop",这样我就不必处理索引和长度了.我建议在构建时在菜单中显示七个项目(我将使用<ul>和<li>).
当我调试并意外地添加了背景颜色<li>时,是什么时候全都崩溃了.<li>在可见的第7个菜单后,我发现至少有30个空<li>.
为什么会这样?
编辑:
这是循环.循环为另一个函数创建另一个对象,以便稍后解析.(它创建一个<li>带有<a>前一个数组提供的属性的内部.)我知道另一个函数工作正常,因为当我将这个"for-in"循环更改为普通for循环或while循环时,它工作正常.
this.sectionList = function(menu, id) {
var list = new Array();
for(var i in menu) {
var listItem = {
"element" : "li",
"contains" : [{
"element" : "a",
"attr" : {
"href" : menu[i].sectionName + ':' + id
},
"contains" : menu[i].menuName
}]
}
list.push(listItem);
}
}
Run Code Online (Sandbox Code Playgroud) for-in-loop ×7
javascript ×4
arrays ×3
loops ×3
object ×2
for-loop ×1
iteration ×1
json ×1
objective-c ×1
protocols ×1
swift ×1
types ×1
typescript ×1