Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >找到有最便宜座位的物体

找到有最便宜座位的物体
EN

Code Review用户
提问于 2019-08-20 12:38:24
回答 1查看 61关注 0票数 1

我有以下json对象

代码语言:javascript
运行
AI代码解释
复制
    const file = [
  {
    "seatNumber": "1A",
    "price": "£19.99",
    "available": true,
    "disabilityAccessible": true
  },
  {
    "seatNumber": "2A",
    "price": "£19.99",
    "available": false,
    "disabilityAccessible": false
  },
  {
    "seatNumber": "3A",
    "price": "£19.99",
    "available": false,
    "disabilityAccessible": false
  },
  {
    "seatNumber": "4A",
    "price": "£19.99",
    "available": true,
    "disabilityAccessible": false
  },
  {
    "seatNumber": "5A",
    "price": "£19.99",
    "available": false,
    "disabilityAccessible": false
  },
  {
    "seatNumber": "1B",
    "price": "£12.99",
    "available": true,
    "disabilityAccessible": true
  },
  {
    "seatNumber": "2B",
    "price": "£12.99",
    "available": false,
    "disabilityAccessible": false
  },
  {
    "seatNumber": "3B",
    "price": "£12.99",
    "available": false,
    "disabilityAccessible": false
  },
  {
    "seatNumber": "4B",
    "price": "£12.99",
    "available": false,
    "disabilityAccessible": false
  },
  {
    "seatNumber": "5B",
    "price": "£12.99",
    "available": true,
    "disabilityAccessible": false
  },
  {
    "seatNumber": "1C",
    "price": "£12.99",
    "available": true,
    "disabilityAccessible": true
  },
  {
    "seatNumber": "2C",
    "price": "£12.99",
    "available": true,
    "disabilityAccessible": false
  },
  {
    "seatNumber": "3C",
    "price": "£12.99",
    "available": true,
    "disabilityAccessible": false
  },
  {
    "seatNumber": "4C",
    "price": "£12.99",
    "available": true,
    "disabilityAccessible": false
  },
  {
    "seatNumber": "5C",
    "price": "£12.99",
    "available": true,
    "disabilityAccessible": false
  },
  {
    "seatNumber": "1D",
    "price": "£12.99",
    "available": true,
    "disabilityAccessible": true
  },
  {
    "seatNumber": "2D",
    "price": "£12.99",
    "available": false,
    "disabilityAccessible": false
  },
  {
    "seatNumber": "3D",
    "price": "£12.99",
    "available": true,
    "disabilityAccessible": false
  },
  {
    "seatNumber": "4D",
    "price": "£12.99",
    "available": true,
    "disabilityAccessible": false
  },
  {
    "seatNumber": "5D",
    "price": "£12.99",
    "available": true,
    "disabilityAccessible": false
  },
  {
    "seatNumber": "1E",
    "price": "£8.99",
    "available": true,
    "disabilityAccessible": true
  },
  {
    "seatNumber": "2E",
    "price": "£8.99",
    "available": true,
    "disabilityAccessible": false
  },
  {
    "seatNumber": "3E",
    "price": "£8.99",
    "available": false,
    "disabilityAccessible": false
  },
  {
    "seatNumber": "4E",
    "price": "£8.99",
    "available": true,
    "disabilityAccessible": false
  },
  {
    "seatNumber": "5E",
    "price": "£8.99",
    "available": false,
    "disabilityAccessible": false
  }
]

我正在尝试显示最便宜的对象的seatNumber。到目前为止,我有以下工作,但想知道是否有更好的方法遵循es6格式的大o符号

代码语言:javascript
运行
AI代码解释
复制
const seats = file.filter( seat => seat.price.replace(/[^0-9.-]+/g,"") == Math.min(...file.map(function ( seat ) { return Number(seat.price.replace(/[^0-9.-]+/g,"")) }) ) ).map(seat => seat.seatNumber);
        console.log(seats)

输出是

[ '1E', '2E', '3E', '4E', '5E' ]

EN

回答 1

Code Review用户

回答已采纳

发布于 2019-08-20 17:33:53

跟在小O.

后面

你问

"...if有一个更好的方法来遵循大的o表示法.“(?)

大O表示法是一种形式化的数学惯例,用来表达函数(数学函数)在接近无穷远时的行为方式。

它在计算机科学中被用来分类算法的复杂性与一个可定义的输入度量,通常是输入阵列的大小时处理数组。

您不能“遵循”大O表示法,因为除了比较之外,它无法提供关于如何降低算法复杂性的洞察力。

找到大O

要使用Big对您的函数进行分类,首先我们需要使其至少具有可读性,并将其转换为一个函数。见小片段。

现在,计算函数循环在输入数组数据中每个项上的次数。经验允许您在头脑中执行此操作,但为了演示我们修改了函数,每次处理输入数组中的项时,我们都会对函数进行计数。

因为我们需要拟合一条曲线,我们需要至少3种不同的输入大小,这是我用一些随机数据做的。

代码语言:javascript
运行
AI代码解释
复制
function bestSeats(data) {
     var c = 0; // the counter
     const seats = data.filter( seat => 
         (c++,  // count the filter iterations
         seat.price.replace(/[^0-9.-]+/g, "") == Math.min(
                 ...data.map(function ( seat ) { 
                     c += 2;  // this counts as two
                              // once each to map to the arguments of Math.min
                              // once each to find the min                                   
                     return Number(seat.price.replace(/[^0-9.-]+/g, "")) 
                 }
             )
         ))).map(seat => (
             c++,  // count each result
             seat.seat
         )); 
     return "O(n) = O(" + data.length + ") = " + c;
}

function randomData(size) { 
    const data = [];
    while (size--) { data.push({seat:size, price: "$"+(Math.random() * 100 | 0)})}
    return data;
}
console.log("Eval complexity A:" + bestSeats(randomData(10)));
console.log("Eval complexity B:" + bestSeats(randomData(100)));
console.log("Eval complexity C:" + bestSeats(randomData(500)));

我们可以用三个点来找出最适合的曲线

代码语言:javascript
运行
AI代码解释
复制
 O(10) ~= 211
 O(100) ~= 20,102
 O(500) ~= 500,005

经验告诉我,这是一个多项式的一些(不太高)的秩序。使用图形计算器,我在2.15找到了一个合理的匹配点,使您的函数变得非常复杂

O(n^{2.15})

这是疯狂的低效。哦!

所以保持

"...in es6格式“(?)

考虑到一种更干净、更易读、更少CO2产生海平面上升的方法是对座位进行两次扫描。第一次通过查找最小价格,第二次提取最小价格座位号。

这个例子使用的是for of循环,而不是像filtermap这样的Array方法,因为这些数组方法有一种令人讨厌的方法,使人们无法理解他们所做的复杂程度的疯狂,而且for of比数组方法更快一些,并且经常允许更好的优化,所以它是for of的胜利。

示例在O(n)线性时间.

代码语言:javascript
运行
AI代码解释
复制
 function bestSeats(seats) {
     var min = Infinity, minVal;
     const result = [];
     for (const seat of seats) {
         const price = Number(seat.price.slice(1));
         if (price < min) {
             min = price;
             minVal = seat.price;
         }
     }
     for (const seat of seats) {
         if (seat.price === minVal) { result.push(seat.seatNumber) }
     }
     return result;
 }

如果必须使用数组方法。

代码语言:javascript
运行
AI代码解释
复制
 function bestSeats(seats) {
     const price2Num = seat => Number(seat.price.slice(1));
     const min = (min, seat) => price2Num(seat) < min ? price2Num(seat) : min;
     const minPrice = "$" + seats.reduce(min, Infinity);
     return seats.filter(seat => seat.price === minPrice).map(seat => seat.seatNumber);
 }
票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/226524

复制
相关文章
vue中在父组件点击按钮触发子组件的事件
1、父组件的button元素绑定click事件,该事件指向notify方法 2、给子组件注册一个ref=“child” 3、父组件的notify的方法在处理时,使用了$refs.child把事件传递给子组件的parentMsg方法,同时携带着父组件中的参数msg 4、子组件接收到父组件的事件后,调用了parentMsg方法,把接收到的msg放到message数组中
江一铭
2022/06/16
6.5K0
vue.js 父组件如何触发子组件中的方法
组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能。在有些情况下,组件也可以表现为用 is 特性进行了扩展的原生 HTML 元素。
IT工作者
2022/02/17
4.8K0
vue 父组件调用子组件的函数_vue子组件触发父组件方法
项目里将element-ui的el-upload写成公共组件方便调用,官方的before-upload方法用于处理上传前要做的事,如:比较文件大小,限制文件类型等,通过返回true 或 false 控制是否上传。 当该组件调用父组件方法,并且要能获取到父组件方法的返回值,如何实现?
全栈程序员站长
2022/11/10
3K0
vue子组件传值给父组件_子组件调用父组件中的方法
大家好,又见面了,我是你们的朋友全栈君。 参考视频 : https://www.bilibili.com/video/av32790541/?spm_id_from=trigger_reload 原
全栈程序员站长
2022/10/04
4.3K0
vue子组件传值给父组件_子组件调用父组件中的方法
Vuejs中父组件主动调用子组件的方法
我们都知道,vue是单向流,但是有时候我们需要在父组件中主动通知子组件一些信息,使其做出一些响应变化,那么如何在父组件中去主动调用子组件的方法呢?Vue当然给我们提供了方法,如下:
飞奔去旅行
2019/06/13
5.1K0
Vue父组件调用子组件事件
Vue父组件向子组件传递事件/调用事件 不是传递数据(props)哦,适用于 Vue 2.0 方法一:子组件监听父组件发送的方法 方法二:父组件调用子组件方法 子组件: export default { mounted: function () { this.$nextTick(function () { this.$on('childMethod', function () { console.log('监听成功') })
大鹅
2021/06/11
7490
Vue父组件与子组件传递事件/调用事件
如上:通过this.$emit()来触发父组件的方法。具体就是子组件触发$emit绑定的事件watchChild,然后父组件监听watchChild,一旦watchChild被触发便会触发父组件的parentReceive方法。
IT工作者
2022/02/17
3.5K0
输入框在输入中文时回车误触发输入的回车事件
这个问题出现在:chatx.me的输入框 最近反应的人比较多,然后还是问了下前前端同事,解决了。
SingYi
2023/08/23
3500
阻止中文输入时触发input事件
做限制输入框可输入最大的长度和实时匹配输入框数据时遇到了坑 —— 当中文输入时input事件也会被触发,即假设限制的是2个字符,你要输入社会人的“社(she)”,就会直接被截取,输入框填充文本sh。或者是在中文输入法时也会一直去调接口,匹配数据,影响了页面的性能!代码如下:
全栈程序员站长
2022/09/01
1.2K0
vue 父组件调用子组件的方法_vue子组件修改父组件值
我们都知道通过$ref可以获取到某个DOM,但是它也可以用来获取子组件的实例,调用子组件的方法
全栈程序员站长
2022/11/09
2.1K0
React父组件调用子组件的方法
React组件化开发中子组件可以通过传递变量或者父组件的方法来实现和父组件的通信或者调用函数传值,但是父组件如何调用子组件的方法呢?很多介绍Hooks的文章并没有讲到useImperativeHandle,我以使用React18+TypeScript开发的项目为例,组件使用Hooks。以下是我精简过后的代码。
用户6256742
2022/07/06
5.8K0
Vue子组件调用父组件的方法
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
多凡
2019/11/01
2.2K0
子组件派发事件和值给父组件
父组件通过v-on绑定子组件派发的事件,并触发一个新的事件,新的事件内可以接收传来的值
小小杰啊
2022/12/21
3040
vue父组件引入子组件_vue子组件传递方法给父组件
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
1.1K0
vue父组件操作子组件的方法_vue父组件获取子组件数据
我们经常分不清什么是父组件,什么是子组件。现在来简单总结下:我们将某段代码封装成一个组件,而这个组件又在另一个组件中引入,而引入该封装的组件的文件叫做父组件,被引入的组件叫做子组件。具体代码如下
全栈程序员站长
2022/09/19
7.1K0
vue父组件操作子组件的方法_vue父组件获取子组件数据
vue父组件调用子组件方法
抱怨身处黑暗,不如提灯前行。——刘同 首先是官方文档 这里使用ref属性去访问子元素 <hello-world ref="helloWorld" msg="Hello World"></hello-world> 然后打印一下 console.log(this.$refs.helloWorld); 可以看到成功获取到 再到子组件定义一个方法: 父组件访问: 效果:
阿超
2022/08/17
1.8K0
vue父组件调用子组件方法
vue子组件调用父组件方法
强迫学习的东西是不会保存在心里的。——《柏拉图论教育》 首先我们在子组件中这样定义 <template> <div> <el-button @click="callSuper">123</el-button> </div> </template> <script> export default { methods: { callSuper() { this.$emit('parentEvent', '我的'); } } }; </script> 这里的组件就只有一个el-
阿超
2022/08/16
2.1K0
vue子组件调用父组件方法
input输入中文时,拼音触发input事件
在上一篇文章中写到了函数防抖,在使用函数防抖来进行搜索框优化的时候会遇到一个问题,就是监听文本输入框的input事件,在拼写汉字(输入法)但汉字并未实际填充到文本框中时会触发input事件,会出现下图的效果
OECOM
2020/07/01
8.3K1
vue父组件调用子组件方法
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
多凡
2019/11/01
2.6K0
vue父组件中获取子组件中的数据
<FormItem label="上传头像" prop="image"> <uploadImg :width="150" :height="150" :name="'avatar'" size="150px*150px" ref="avatar"></uploadImg> </FormItem> <FormItem label="上传营业执照" prop="businessLicence"> <uploadImg :width="350" :heigh
蓓蕾心晴
2018/04/12
7K0

相似问题

触发父组件父节点方法的子组件输出事件

38

监听VueJs中父组件触发的事件

110

如何从角2中的子组件事件触发父组件中的局部引用?

25

子组件中父组件的触发方法-- react

14

角键事件不会在子组件上触发,而只在父组件上触发。

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档