真的希望有人可以帮助我解决我最近遇到过的问题.
假设我在AngularJS中有两个对象.
$scope.fields = ['info.name', 'info.category', 'rate.health']
$scope.rows = [{
info: { name: "Apple", category: "Fruit"},
rate: { health: 100, ignored: true}
},{
info: { name: "Orange", category: "Fruit"},
rate: { health: 100, ignored: true}
},{
info: { name: "Snickers", category: "Sweet"},
rate: { health: 0, ignored: true}
}]
Run Code Online (Sandbox Code Playgroud)
然后我想在视图中显示一个表格,只显示该字段中的字段$scope.fields.如果桌子是平的,这将是非常容易的,我知道我可以使用JavaScript来展平它,但必须有一种方法可以通过将点符号转换为路径来实现.
我添加了一个JSFiddle来演示我遇到的问题:
JSFiddle:http://jsfiddle.net/7dyqw4ve/1/
我也尝试过如下所示的做法,但问题是在视图中使用函数的可怕做法: 将点符号中的JavaScript字符串转换为对象引用
如果有人有任何想法我会非常感激.
通过解构可以很方便地从Objects 中提取属性:
let o = {id: "100", name: "Jane Doe", address: {id:1, city:"Fargo"}},
key = "address";
let {address: {id: id}} = o; // 1
Run Code Online (Sandbox Code Playgroud)
解构模式也可以计算:
let {[key]: {city: city}} = o; // Fargo
Run Code Online (Sandbox Code Playgroud)
但显然不可能动态提取嵌套对象的属性:
key = "address.city";
({[key]: city} = o); // undefined
Run Code Online (Sandbox Code Playgroud)
是否可以Object使用计算模式解构嵌套的 s?
我有一长串用户输入,并希望将它们存储在一个对象中,而不是用HTML拼写出来.我想将这些值绑定到另一个存储用户/客户数据的对象.由于其简单性和功能性,优选使用ngModel.
谁知道我怎么能做到这一点?
以下示例(不工作).
@Component({
template: `
<div>
<h2>NgModel Example</h2>
<div *ngFor="let input of inputList">
{{ input.label }} <input type="text" [(ngModel)]="input.bindTo">
</div>
</div>
<p>This is not working: {{customerInfo.name}}, {{customerInfo.email}}</p>
`,
directives: [...]
})
export class AppComponent {
inputList = [
{
label: "Enter your name",
bindTo: this.customerInfo.name // also tried 'customerInfo.name'
},
{
label: "Enter your email",
bindTo: this.customerInfo.email
}
]
customerInfo = {
name: 'test',
email: ''
}
}
Run Code Online (Sandbox Code Playgroud) 我想通过"user"对象中的"name"对下面的数组进行排序
var myArr = [
{"id":1,"user":{"name":"allen","id":101}},
{"id":2,"user":{"name":"martin","id":102}}
]
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我有一个方法来排序对象数组,但我不能将它用于对象的数组
这是方法:
function dynamicSort(property) {
var sortOrder = 1;
if (property[0] === "-") {
sortOrder = -1;
property = property.substr(1);
}
return function (a, b) {
var result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;
return result * sortOrder;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我可以使用这个排序:
myArr.sort(dynamicSort("id"));
Run Code Online (Sandbox Code Playgroud) 我目前有一个Javascript函数,它使用字符串来引用对象名称并访问其属性.我目前正在使用eval()来获得所需的效果,我知道这是非常非常错误的.这是我目前如何实现我想要的一个例子:
var stringToObjectRef = function() {
var myTestVar = "myTestObject";
var myTestObject = { 'item1' : 100, 'item2' : 12, 'item4' : 18 };
var myValue = eval(myTestVar + '.item1');
alert(myValue);
}();
Run Code Online (Sandbox Code Playgroud)
我尝试过使用像[myTestVar] .item1这样的东西,但这会返回undefined.实现此目的的正确语法是什么?
提前致谢.
通过添加模板文字类型,现在可以以类型安全的方式表达属性路径(点符号)。一些用户已经使用模板文字类型实现了一些东西或者提到了它。
我想更进一步,并表达类型中空值/未定义/可选的可能性,例如foo.bar?.foobar,foo.boo.far?.farboo编译器应该可以接受,foo.bar.foobar而不适用于以下类型:
type Test = {
foo: {
bar?: {
foobar: never;
barfoo: string;
};
foo: symbol;
boo: {
far:
| {
farboo: number;
}
| undefined;
};
};
};
Run Code Online (Sandbox Code Playgroud)
到目前为止,可选参数被拾取(我不知道为什么,但它在我的 IDE 中使用相同的打字稿版本,请参见下面的屏幕截图)但不是明确标记的“远”属性作为未定义。这个游乐场展示了我的进步。不知何故,“未定义检查”没有按预期工作。
我有一个表单,我想将它发送到一个 ajax 端点,为此我有这个辅助方法:
$.fn.serializeFormToObject = function() {
//serialize to array
var data = $(this).serializeArray();
//add also disabled items
$(':disabled[name]', this)
.each(function() {
data.push({ name: this.name, value: $(this).val() });
});
//map to object
var obj = {};
data.map(function(x) { obj[x.name] = x.value; });
return obj;
};
Run Code Online (Sandbox Code Playgroud)
问题是我的表单的某些名称中有点符号(使用 MVC 强类型模型)所以我有这个对象作为结果:
Task.Addresses.Box:""
Task.Addresses.City:"Limal"
Task.Addresses.Country:"Belgique"
Task.Deadline:"1/10/2017 12:18:18 PM"
Task.TaskSourceId:"1"
Run Code Online (Sandbox Code Playgroud)
预期的结果是:
{ Task : { Addresses: { Box: "", City: "Limal", Country: "Belgique"}, Deadline: "1/10/2017 12:18:18 PM", TaskSourceId:"1" } }
Run Code Online (Sandbox Code Playgroud)
我使用 lodash 库,但几个小时后我找不到实现此预期结果的方法。
有人可以为我提供一个有效的 javascript …
我有一个不知道其结构的嵌套对象。例如:
const nestedObject = {
"one": {
"two": {
"three": 3
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想显示的价值three。
我有一个这样的数组,以便我知道如何导航对象以便到达three:
const keys = ["one", "two", "three"]
Run Code Online (Sandbox Code Playgroud)
不必以这种方式构造。
那么,如何访问上面one.two.three给出的keys数组?或其他一些数据结构。我本来打算进行递归,但它似乎太复杂了,我觉得这里有一个简单的解决方案。
我在eval()上听到了很多不同的意见,并且有点不确定在这种情况下是否可以使用eval():
假设我有一个这样的对象:
var bla = {
blubb: function (callback) {
//GET some stuff via ajax
//call the callback
}
}
Run Code Online (Sandbox Code Playgroud)
和这样的字符串:
var someString = "bla.blubb";
Run Code Online (Sandbox Code Playgroud)
为了调用函数(和回调函数)来评估字符串是不是很邪恶?
var callMe = eval(someString)
callMe(function(){
alert('yay')!
});
Run Code Online (Sandbox Code Playgroud) 我有正在使用nodeJS读取的csv文件。我在阅读之前将每个文件转换为文本。
文件中的每一行都有以'='分隔的数据。
每行看起来像
data.location.degree.text=sometexthere
Run Code Online (Sandbox Code Playgroud)
“ =“之前的第一部分代表我的应用程序中json对象的索引。我的目的是解析此数据并为其构建json表示,以便上面的行成为
data:{
location:{
degree:{
text: 'sometexthere'
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用javascript / node js; 如何将应该表示嵌套JSON键序列的字符串转换为上述json对象?
javascript ×8
ecmascript-6 ×2
angular ×1
angularjs ×1
arrays ×1
jquery ×1
json ×1
lodash ×1
nested ×1
node.js ×1
object ×1
sorting ×1
typescript ×1