获取包含对象的数组的索引的最佳方法是什么?
想象一下这种情况:
var hello = {
hello: 'world',
foo: 'bar'
};
var qaz = {
hello: 'stevie',
foo: 'baz'
}
var myArray = [];
myArray.push(hello,qaz);
Run Code Online (Sandbox Code Playgroud)
现在我想拥有属性indexOf的对象,在这个例子中,它将是.hello'stevie'1
我是JavaScript的新手,我不知道是否有一个简单的方法,或者我是否应该构建自己的函数来做到这一点.
我有一个用AngularJS编写的webapp,它基本上将API轮询到两个端点.所以,它每分钟都会进行一次调查,看看是否有新的东西.
我发现它有一个小的内存泄漏,我已尽力找到它,但我无法做到.在这个过程中,我设法减少了我的应用程序的内存使用量,这很棒.
在没有做任何其他事情的情况下,每次调查你都可以看到内存使用量的增长(这是正常的)然后它应该下降,但它总是在增加.我从改变阵列的清洗[]到array.length = 0,我想我敢肯定,引用不持续存在,因此它不应该被保留的任何现象.
我也试过这个:https://github.com/angular/angular.js/issues/1522
但没有运气......
所以,这是两个堆之间的比较:

大多数泄漏似乎来自(数组),如果我打开,它是通过解析API调用返回的数组,但我确定它们没有被存储:
这基本上是结构:
poll: function(service) {
var self = this;
log('Polling for %s', service);
this[service].get().then(function(response) {
if (!response) {
return;
}
var interval = response.headers ? (parseInt(response.headers('X-Poll-Interval'), 10) || 60) : 60;
services[service].timeout = setTimeout(function(){
$rootScope.$apply(function(){
self.poll(service);
});
}, interval * 1000);
services[service].lastRead = new Date();
$rootScope.$broadcast('api.'+service, response.data);
});
}
Run Code Online (Sandbox Code Playgroud)
基本上,假设我有一个sellings服务,那就是service变量的值.
然后,在主视图中:
$scope.$on('api.sellings', function(event, data) {
$scope.sellings.length = 0;
$scope.sellings = data; …Run Code Online (Sandbox Code Playgroud) 我最近在Angular中的指令中有一些问题没有被正确清理,因此会产生内存泄漏.
所以,今天,当我正在进行测试以确保不会发生时,我意识到没有办法停止观察.
var stopObserving = attrs.$observe('myProperty', function(newValue) {
updateElement(newValue);
});
Run Code Online (Sandbox Code Playgroud)
因为我认为它的工作方式与它的工作方式相同,$watch但很明显它没有.根据文档,$observe将返回回调函数,就是它,第二个参数.
我有这个测试:
describe('destroy',function(){
beforeEach(function(){
$scope.$destroy();
});
it('should have emptied the DOM node', function(){
expect(element.text()).toBe('');
});
it('shouldn\'t have any more watchers', function(){
dump(element.data().$scope.$$watchers);
expect(element.data().$scope.$$watchers.length).toBe(0);
});
});
Run Code Online (Sandbox Code Playgroud)
它失败了,因为有一个观察者.我已经检查过并且$destroy正在调用,因此,清洁完成了.但是,我怎么能摆脱那个观察者呢?
代码,如果你好奇的话在这里:
我ng-swipe在移动设备上遇到组合和水平滚动问题.用例是我有一个页面,刷卡应该下一个或上一个加载,内部有模块显示很多信息.其中一些是滚动的.
因此,只要您滚动父母的滑动即可开始导航.所以我ng-swipe在可滚动元素的父级上添加了另一对这种技巧:
self.onInnerSwipe = function($event) {
$event.originalEvent.preventAction = true;
};
Run Code Online (Sandbox Code Playgroud)
然后在父母身上:
var shouldActionProceed = function($event) {
return !$event || !$event.originalEvent || !$event.originalEvent.preventAction;
};
self.goToPrev = function($event) {
if (shouldActionProceed($event)){
// Do Magic
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在该元素上滑动但滚动不能正常工作,这就行动不会继续.它有种类,但事实并非如此.它开始一点然后停止.
在Chrome上,有时会记录此警告.
忽略尝试取消具有cancelable = false的touchmove事件,例如因为滚动正在进行且无法中断.
我在这里准备了一个演示:http://jsbin.com/webologavu/2/这个过于简单,但你可以重现这个问题.
任何提示?
我在图形上表示血压,我想表示收缩压和舒张压以及图形.通常,这些图形按照以下规则一起显示:
90收缩压应与60舒张压相同140收缩压应与舒张压90相同
所以我认为这是因为max和min是设置人员的基础所以我开发了这个来尝试解决这个问题:
function getObjectSystolicDiastolic(){
var min_systolic = getMinValue(80,person.data,10),
max_systolic = getMaxValue(150,person.data,10),
min_diastolic = getMinValue(50,person.data,10),
max_diastolic = getMaxValue(120,person.data,10),
min_systolic_eq = min_diastolic*(140-90)/(90-60) + 90 - 60*(140-90)/(90-60),
max_systolic_eq = max_diastolic*(140-90)/(90-60) + 90 - 60*(140-90)/(90-60);
// Getting the largest range
var min_total = min_systolic < min_systolic_eq ? min_systolic : min_systolic_eq;
var max_total = max_systolic < max_systolic_eq ? max_systolic : max_systolic_eq;
return {
min_systolic : min_total,
max_systolic : max_total,
min_diastolic : (min_total - 90 + 60*(140-90)/(90-60))*(90-60)/(140-90),
max_diastolic : (max_total - 90 + 60*(140-90)/(90-60))*(90-60)/(140-90)
}; …Run Code Online (Sandbox Code Playgroud) 我是Ionic的新手,但是自从我想尝试它以来已经很久了.我只是在玩,所以也许我没有得到完整的概念.
我正在尝试做一个简单的应用程序,底部有三个选项卡,并且所有三个选项卡都有一个设置图标.当您单击该图标时,应该隐藏选项卡并显示设置屏幕.
由于我不希望用户丢失任何内容,因此所有视图都从全局视图继承:
angular.module('app', ['ionic', 'debug']).config(function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('app', {
url: "/app",
abstract: true,
controller: 'AppController',
templateUrl: "ui/modules/tabs/view.html"
})
.state('app.compose-text', {
url: '/text',
views: {
'compose-text': {
templateUrl: 'ui/modules/text-composer/view.html'
}
}
})
.state('app.compose-draw', {
url: '/draw',
views: {
'compose-draw': {
templateUrl: 'ui/modules/draw-composer/view.html'
}
}
})
.state('app.compose-photo', {
url: '/photo',
views: {
'compose-photo': {
templateUrl: 'ui/modules/photo-composer/view.html'
}
}
})
.state('app.settings', {
url: '/settings',
views: {
'settings': {
controller: 'ui/modules/settings/ctrl.js',
templateUrl: 'ui/modules/settings/view.html'
}
}
});
// if none of the above …Run Code Online (Sandbox Code Playgroud) 我有一个脚本,可以在Microsoft Exchange Server和Active Directory中创建用户.因此,虽然通常用户的名字在西班牙有重音符号或ñ,但我想避免使用用户名,以免在旧系统中造成任何不兼容性.
那么,我怎么能像这样清理一个字符串呢?
$name = "Ramón"
Run Code Online (Sandbox Code Playgroud)
那样的?:
$name = "Ramon"
Run Code Online (Sandbox Code Playgroud) 我面临一个非常大的问题(至少对我而言).我会给你一些背景知识.
我正在开发一个移动网络应用程序,它将显示我所在城市的公交车站和自行车站的信息.它将显示公共汽车和自行车停靠点的GMap标记,如果您点击它,您将获得有关公共汽车的到达时间或可用的自行车数量的信息.我有很好的涵盖.
有问题的部分是装载车站.
我的第一种方法是在页面加载时加载全部站点.它大约是200 Kb的JSON加上迭代数组并将其放入地图的时间.它们被隐藏加载,因此当用户点击行名称时,它们将使用"findMarker"函数显示.如果地图上存在其他工作站,则会隐藏它们以避免地图中有太多标记.
这适用于iPhone 4或全新HTC等新手机,但它在2年前的手机上表现不佳.
我想的第二种方法是按要求加载它们,所以你点击工作站,它们被加载到地图,然后显示但这导致两个问题:
最后,我想过使用LocalStorage来存储它们,因为它们不会改变那么多,但是会有大量的数据然后,因为它们是关键值而难以检索它们(以及我我不太确定这一点.我发现不支持此功能的设备必须回退到其他选项之一.
所以,那就是说,我认为可能是某人面临一些类似的问题,并以某种方式解决了它或对我有一些提示:).
任何帮助将非常感激.
我在socket.io和现代浏览器方面遇到了一些奇怪的问题.令人惊讶的是,IE9的工作正常,因为flashsocket的回退看起来效果更好.
在我的服务器(带快递)
var io = socketio.listen(server.listen(8080));
io.configure('production', function(){
console.log("Server in production mode");
io.enable('browser client minification'); // send minified client
io.enable('browser client etag'); // apply etag caching logic based on version number
io.enable('browser client gzip'); // gzip the file
io.set('log level', 1); // reduce logging
io.set('transports', [ // enable all transports (optional if you want flashsocket)
'websocket'
, 'flashsocket'
, 'htmlfile'
, 'xhr-polling'
, 'jsonp-polling'
]);
});
Run Code Online (Sandbox Code Playgroud)
在浏览器上,我可以在网络选项卡(在Chrome上)看到websocket已建立并101 Switching Protocols以待处理模式进入.之后,出现xhr-polling和jsonp-polling(flashsocket会发生什么?)
最糟糕的是,信息不会来回传播.我有这个连接:
io.sockets.on('connection', function (socket) {
// If someone new …Run Code Online (Sandbox Code Playgroud) 我最近被介绍给了Webpack,我一直在尝试为Angular 1和Webpack安装ES6初学者包.到目前为止,上帝.我能够创建这样的东西:
import angular from 'angular';
import uiRouter from 'angular-ui-router';
import ngAnimate from 'angular-animate';
import ngAria from 'angular-aria';
import ngMessages from 'angular-messages';
import ngMaterial from 'angular-material';
import UserModule from './modules/user';
const MODULE_NAME = 'nukehome';
const ngModule = angular.module(MODULE_NAME, [
uiRouter,
ngAnimate,
ngAria,
ngMessages,
ngMaterial,
UserModule.name
]);
Run Code Online (Sandbox Code Playgroud)
我个人非常喜欢.
但是,问题来自ngtemplate-loader.我的web pack配置看起来像这样:
webpack: {
context: '<%= ui %>/js',
entry: ['babel-polyfill', './index.js'],
output: {
path: '<%= build %>/js',
filename: '<%= package.name %>.js'
},
module: {
loaders: [
{
test: /\.html$/,
loader: 'ngtemplate?relativeTo=' + (path.resolve(__dirname, …Run Code Online (Sandbox Code Playgroud) angularjs ×5
javascript ×5
ecmascript-6 ×1
highcharts ×1
html5 ×1
json ×1
memory-leaks ×1
node.js ×1
performance ×1
powershell ×1
socket.io ×1
touch ×1
webpack ×1
websocket ×1