我不想使用已知点符号访问深层对象,而是反过来:从深层对象的键构建点符号字符串.
所以给出以下JSON对象:
{
great:{
grand:{
parent:{
child:1
},
parent2:1
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想获得以下数组路径:
[
"great.grand.parent.child",
"great.grand.parent2"
]
Run Code Online (Sandbox Code Playgroud)
提前致谢!
假设我的数据源对象看起来像这样:
[{
"id": 123,
"name": "blabla1",
"kids": {
"id": "kid1",
"name": "kk1"
}
},{
"id": 456,
"name": "blabla2",
"kids": {
"id": "kid2",
"name": "kk2"
}
}]
Run Code Online (Sandbox Code Playgroud)
这是一个包含2个对象的列表(数组),每个对象带有“ kids”键,其中包含一个带有键的内部对象,依此类推。
使用引导表时,每一列都连接到源对象中的键,例如:
<th data-field="id">ID</th>
Run Code Online (Sandbox Code Playgroud)
这里的问题是如何定义要连接到源对象中的内部键的列?
我尝试了以下操作(适用于上面的示例数据):
<th data-field="kids.id">Inner ID</th>
Run Code Online (Sandbox Code Playgroud)
而且它不起作用。:(
PS:
我知道我可以通过实现指定的“数据格式器”属性来格式化每一列的数据,但是在这种情况下,我更喜欢找到一种更直接,更快速的方法来完成所需的工作。
假设我有这个架构:
var UserSchema = new Schema({
name : {
firstName : String,
lastName : String
}
});
Run Code Online (Sandbox Code Playgroud)
我创建了这个用户:
User.create({
name : {
firstName : Bob,
lastName : Marley
}
}, function (err, user) {
if(err) {
return console.error(err);
} else {
return console.log(user);
}
});
Run Code Online (Sandbox Code Playgroud)
我注意到如果我这样做:
User.findOneAndUpdate({_id: userId}, { name: { firstName : "Damian" } }, function (err, user) {
if(err) {
return console.error(err);
} else {
return console.log(user);
}
});
Run Code Online (Sandbox Code Playgroud)
我的用户现在是:
user = {
name : {
firstName : …Run Code Online (Sandbox Code Playgroud) 假设我们有这样的地图:
%{"a": %{"b": 2, "c":5}, "d": 1}
Run Code Online (Sandbox Code Playgroud)
elixr 中是否有类似的函数(js 回答同一问题)?
最终结果应该是:
%{"a.b": 4, "a.c":5, "d": 1}
Run Code Online (Sandbox Code Playgroud) 我有一个包含项目(只有name属性)和组(带有children属性,它们可能包含项目或其他组)的对象数组,我需要获得一个完整的needle值路径,所以在这种情况下它会是myObj[2]["children"][0]["children"][1]["children"][0],加上我仅限于相当旧的 JS 版本 ECMA 262(我在 Photoshop 中使用它)
var myObj = [
{
"name": "group1",
"children": [
{
"name": "group2",
"children": [
{
"name": "item0"
}]
}]
},
{
"name": "item1"
},
{
"name": "needleGroup",
"children": [
{
"name": "needleNestedGroup",
"children": [
{
"name": "item3"
},
{
"name": "needleNestedDeeperGroup",
"children": [
{
"name": "needle"
}]
}]
}]
}];
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是将对象转换为数组或数组,这样处理起来会更容易,所以我的对象变成了
[
[
[
"item0"
]
],
"item1",
[
[
"item3",
[
"needle"
]
] …Run Code Online (Sandbox Code Playgroud) 我试图在不知道对象value的key情况下找到一个对象,包括嵌套对象,因此该函数将获取一个键和一个对象并返回值或未定义。这是我的功能:
/* Iterate over object and include sub objects */
function iterate (obj, key) {
for (var property in obj) {
if (obj.hasOwnProperty(property)) {
//in case it is an object
if (typeof obj[property] == "object") {
if (obj.hasOwnProperty(key)) {
return obj[key]; //return the value
}
}
else {
iterate(obj[property]);
}
}
}
return undefined;
}
Run Code Online (Sandbox Code Playgroud)
我return在一个循环内调用,所以它会更有效率(希望如此......)。
1.有没有人准备好这个功能?这个不行。
2.有人知道要改变什么才能使它工作吗?
任何帮助,包括angular.js功能都会很棒。
谢谢。
我总是不喜欢hasOwnProperty()在javascript中检查循环对象时的需要:
for ( var key in object ) {
if ( !object.hasOwnProperty( key ) ) {
continue;
}
// Now I can do whatever I needed to do
}
Run Code Online (Sandbox Code Playgroud)
它似乎总是浪费垂直空间来遍历对象中的键,然后必须明确检查以确保这些键不是来自其他地方.我显然很熟悉为什么这在javascript中是必要的,特别是由于旧的库有时会将东西注入原型链(咳嗽原型咳嗽).
但是,据我所知,棱角分明没有这样的东西.打字稿肯定没有理由.我无法想象任何现代的JavaScript框架会.因此,在现代Angular应用程序(或任何现代JavaScript应用程序)中跳过此类检查的可能缺点是什么.我只是冒着自己的团队意外修改原型(或意外导入修改原型的库)而导致问题的风险,还是有更多我不知道的麻烦空间?如果我尝试这样做,原型链会以什么其他方式咬我?
for ( let key in object ) {
}
Run Code Online (Sandbox Code Playgroud)
我自己的测试没有发现任何问题,但我可能会遗漏一些明显的东西.是的,我Object.keys( object )在mondern js/ts中知道.它完成了工作,但我不认为它像a一样干净for ... in,如果我能让它hasOwnProperty()死,我宁愿使用它.
假设我有以下 JSON,它可以轻松地来回转换为 JavaScript 对象:
{
"foo": {
"bar": "Common substitute word",
"baz": "Another common substitute word",
"questionWords": {
"wat": "Inadequate question word",
"wut": "Even more inadequate question word"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在另一个 JSON 文件中收到有关此 JSON 的修改,如下所示:
{
"foo.questionWords.wut": "A question word to avoid"
}
Run Code Online (Sandbox Code Playgroud)
所以要修改的路径以字符串形式给出。我必须通过新数据修改第一个 JSON。
但也可能不存在新的数据路径:
{
"foo.callingWords.dude": "Commonly used synonym for pal"
}
Run Code Online (Sandbox Code Playgroud)
并且新的数据路径可能具有不可确定的深度:
{
"who.knows.how.deep.we.will.go": "Look, a penny!"
}
Run Code Online (Sandbox Code Playgroud)
在没有 JS 库的情况下,仅通过普通的 Vanilia JS 处理此问题的最佳方法是什么? …
javascript ×4
json ×2
angular ×1
angularjs ×1
ecmascript-6 ×1
elixir ×1
mongoose ×1
node.js ×1
typescript ×1